为什么这串c代码里的字符串无法显示
本帖最后由 mxwawaawxm 于 2019-11-5 21:51 编辑源自这道题
我写的代码
我的想法是由用户输入字符串、显示的时间、消失的时间、重复次数
但是实际运行过程,printf("\r第%d次--%s", i+1, string);字符串没显示,哪里错了。请问{:301_1009:}
#include <stdio.h>
#include <time.h>
#include <string.h>
#define LEN 128
int sleep(unsigned long millisecond);
void bput(const char *string, int display_ms, int disappear_ms, int cnt);
int main(int argc, char *argv[])
{
char string;
int display_ms;
int disappear_ms;
int cnt;
printf("请依次输入字符串、显示时间,消失时间,次数--");
scanf("%s %d %d %d", string, &disappear_ms, &disappear_ms, &cnt);
bput(string, display_ms, disappear_ms, cnt);
return 0;
}
int sleep(unsigned long millisecond)
{
clock_t start=clock(), end;
do {
if ((end=clock())==(clock_t)-1) {
return 0;
}
} while ((end-start)*1000.0/CLOCKS_PER_SEC < millisecond);
return 1;
}
void bput(const char *string, int display_ms, int disappear_ms, int cnt)
{
int i;
int length=strlen(string);
for (i=0;i<cnt;i++) {
printf("\r第%d次--%s", i+1, string);
fflush(stdout);
sleep(display_ms);
printf("\r第%d次--%*s", i+1, length, " ");
fflush(stdout);
sleep(disappear_ms);
}
printf("\n%s\n", string);
}
为什么字符串无法显示 #include <stdio.h>
#include <time.h>
#include <string.h>
#define LEN 128
int sleep(unsigned long millisecond);
void bput(const char *string, int display_ms, int disappear_ms, int cnt);
int main(int argc, char *argv[])
{
char string;
int display_ms;
int disappear_ms;
int cnt;
printf("请依次输入字符串、显示时间,消失时间,次数--\n");
scanf("%s %d %d %d", string, &display_ms, &disappear_ms, &cnt);
bput(string, display_ms, disappear_ms, cnt);
return 0;
}
int sleep(unsigned long millisecond)
{
clock_t start=clock(), end;
do {
if ((end=clock())==(clock_t)-1) {
return 0;
}
} while ((end-start)*1000.0/CLOCKS_PER_SEC < millisecond);
return 1;
}
void bput(const char *string, int display_ms, int disappear_ms, int cnt)
{
int i;
int length=strlen(string);
for (i=0;i<=cnt;i++) {
printf("\r第%d次--%s", i+1, string);
fflush(stdout);
sleep(display_ms);
printf("\r第%d次--%*s", i+1, length, " ");
fflush(stdout);
sleep(disappear_ms);
}
}
你的scanf接收了两个相同的值disappear_ms吧 本帖最后由 mxwawaawxm 于 2019-11-4 20:59 编辑
能否再帮我看看@庸人误我
我想实现以下功能
用户输入字符串、显示的时间、消失的时间、重复次数
然后显示时间除以字符串长度,得到每个字符的显示时间,依次显示每个字符
而后消失时间除以字符串长度,得到每个字符的消失时间,依次消失每个字符
我的代码如下
结果出现,在显示字符串时,不是依次显示每个字符,而是整个出来。而且不能显示最后一个字符,哪里出错了{:301_1007:}
#include <stdio.h>
#include <time.h>
#include <string.h>
#define LEN 128
int sleep(unsigned long millisecond);
void flicker_str(char *string, int display_ms, int disappear_ms, int cnt);
void display_one_by_one(char *string, int display_ms, int length);
void disappear_one_by_one(char *string, int disappear_ms, int length);
int main(int argc, char *argv[])
{
char string;
int display_ms;
int disappear_ms;
int cnt;
printf("请依次输入字符串、显示时间,消失时间,次数--");
scanf("%s %d %d %d", string, &disappear_ms, &disappear_ms, &cnt);
/*字符串闪烁显示*/
/*隔特定时间依次显示每个字符,而后隔特定时间消去每个字符*/
flicker_str(string, display_ms, disappear_ms, cnt);
return 0;
}
/*暂停多少秒*/
int sleep(unsigned long millisecond)
{
clock_t start=clock(), end;
do {
if ((end=clock())==(clock_t)-1) {
return 0;
}
} while ((end-start)*1000.0/CLOCKS_PER_SEC < millisecond);
return 1;
}
void flicker_str(char *string, int display_ms, int disappear_ms, int cnt)
{
int length=strlen(string);
int i=0;
for (;i<cnt;i++) {
/*隔特定时间依次显示每个字符*/
display_one_by_one(string, display_ms, length);
/*隔特定时间消去每个字符*/
disappear_one_by_one(string, disappear_ms, length);
}
printf("%s\n", string);
}
/*隔特定时间依次显示每个字符*/
void display_one_by_one(char *string, int display_ms, int length)
{
/*将显示时间除以字符串长度,获得每个字符的显示速度*/
int display_ms_one=display_ms/length;
while (*string!='\0') {
printf("%c", *string++);
fflush(stdout);
sleep(display_ms_one);
}
}
/*隔特定时间消去每个字符*/
void disappear_one_by_one(char *string, int disappear_ms, int length)
{
/*将消失时间除以字符串长度,获得每个字符的消失速度*/
int disappear_ms_one=disappear_ms/length;
int i=0;
for (;i<length;i++) {
printf("\b \b");
fflush(stdout);
sleep(disappear_ms_one);
}
} 本帖最后由 庸人误我 于 2019-11-5 13:20 编辑
#include <stdio.h>
#include <time.h>
#include <string.h>
#define LEN 128
int sleep(unsigned long millisecond);
void bput(const char *string, int display_ms, int disappear_ms, int cnt);
void display_one_by_one(char *string, int display_ms, int length);
void disappear_one_by_one(char *string, int disappear_ms, int length);
int main(int argc, char *argv[])
{
char string;
int display_ms;
int disappear_ms;
int cnt;
printf("请依次输入字符串、显示时间,消失时间,次数--\n");
scanf("%s %d %d %d", string, &display_ms, &disappear_ms, &cnt);
bput(string, display_ms, disappear_ms, cnt);
return 0;
}
int sleep(unsigned long millisecond)
{
clock_t start=clock(), end;
do {
if ((end=clock())==(clock_t)-1) {
return 0;
}
} while ((end-start)*1000.0/CLOCKS_PER_SEC < millisecond);
return 1;
}
void bput(const char *string, int display_ms, int disappear_ms, int cnt)
{
int i;
int length=strlen(string);
for (i=0; i<cnt; i++) {
display_one_by_one(string,display_ms,length);
disappear_one_by_one(string,disappear_ms,length);
}
}
/*隔特定时间依次显示每个字符*/
void display_one_by_one(char *string, int display_ms, int length)
{
/*将显示时间除以字符串长度,获得每个字符的显示速度*/
int display_ms_one=display_ms/length;
while (*string!='\0') {
printf("%c", *string++);
fflush(stdout);
sleep(display_ms_one);
}
}
/*隔特定时间消去每个字符*/
void disappear_one_by_one(char *string, int disappear_ms, int length)
{
/*将消失时间除以字符串长度,获得每个字符的消失速度*/
int disappear_ms_one=disappear_ms/length;
int i=0;
for (;i<=length;i++) {
printf("\b \b");
fflush(stdout);
sleep(disappear_ms_one);
}
}
你看下是这样子的吗?没得录动态图的软件,你函数都写好了,调用就可以了呀!有个小错就是显示字符时的for循环i<=length.否则会少打印一个字符 本帖最后由 mxwawaawxm 于 2019-11-5 21:06 编辑
谢谢。直接按你的代码,除了一些错误提示,大致可以了@庸人误我
错误提示
不过,你提到的,是说这里吗
有个小错就是显示字符时的for循环i<=length.否则会少打印一个字符
void disappear_one_by_one(char *string, int disappear_ms, int length)
{
/*将消失时间除以字符串长度,获得每个字符的消失速度*/
int disappear_ms_one=disappear_ms/length;
int i=0;
for (;i<length;i++) {
printf("\b \b");
fflush(stdout);
sleep(disappear_ms_one);
}
我把等于去掉,没影响结果。这应该不用加等号
不过很奇怪的是,我发现你给的代码,大部分也是调用我写的函数,但是我源代码显示出来的结果就跟你不一样
显示字符串时,是一次性显示,而且少了最后一个字符,但消去字符时,倒是正常,一个个消去
我始终不明白我的代码错在哪里{:301_1009:}你能运行我的代码看看吗{:301_1007:}
#include <stdio.h>
#include <time.h>
#include <string.h>
#define LEN 128
int sleep(unsigned long millisecond);
void flicker_str(char *string, int display_ms, int disappear_ms, int cnt);
void display_one_by_one(char *string, int display_ms, int length);
void disappear_one_by_one(int disappear_ms, int length);
int main(int argc, char *argv[])
{
char string;
int display_ms;
int disappear_ms;
int cnt;
printf("请依次输入字符串、显示时间,消失时间,次数--");
scanf("%s %d %d %d", string, &disappear_ms, &disappear_ms, &cnt);
/*字符串闪烁显示*/
/*隔特定时间依次显示每个字符,而后隔特定时间消去每个字符*/
flicker_str(string, display_ms, disappear_ms, cnt);
return 0;
}
/*暂停多少秒*/
int sleep(unsigned long millisecond)
{
clock_t start=clock(), end;
do {
if ((end=clock())==(clock_t)-1) {
return 0;
}
} while ((end-start)*1000.0/CLOCKS_PER_SEC < millisecond);
return 1;
}
void flicker_str(char *string, int display_ms, int disappear_ms, int cnt)
{
int length=strlen(string);
int i=0;
for (i=0;i<cnt;i++) {
/*隔特定时间依次显示每个字符*/
display_one_by_one(string, display_ms, length);
/*隔特定时间消去每个字符*/
disappear_one_by_one(disappear_ms, length);
}
printf("%s\n", string);
}
/*隔特定时间依次显示每个字符*/
void display_one_by_one(char *string, int display_ms, int length)
{
/*将显示时间除以字符串长度,获得每个字符的显示速度*/
int display_ms_one=display_ms/length;
while (*string!='\0') {
printf("%c", *string++);
fflush(stdout);
sleep(display_ms_one);
}
}
/*隔特定时间消去每个字符*/
void disappear_one_by_one(int disappear_ms, int length)
{
/*将消失时间除以字符串长度,获得每个字符的消失速度*/
int disappear_ms_one=disappear_ms/length;
int i=0;
for (;i<=length;i++) {
printf("\b \b");
fflush(stdout);
sleep(disappear_ms_one);
}
} 你看一下第一次的回帖吧!大哥,你的display_ms没有赋值的,disappear_ms接收了两次 庸人误我 发表于 2019-11-5 21:36
你看一下第一次的回帖吧!大哥,你的display_ms没有赋值的,disappear_ms接收了两次
居然又犯了如此低端的错误{:301_1008:},谢谢。
页:
[1]