本帖最后由 mxwawaawxm 于 2019-11-5 21:06 编辑
谢谢。直接按你的代码,除了一些错误提示,大致可以了@庸人误我
错误提示
不过,你提到的,是说这里吗
有个小错就是显示字符时的for循环i<=length.否则会少打印一个字符
[C] 纯文本查看 复制代码 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);
}
我把等于去掉,没影响结果。这应该不用加等号
不过很奇怪的是,我发现你给的代码,大部分也是调用我写的函数,但是我源代码显示出来的结果就跟你不一样
显示字符串时,是一次性显示,而且少了最后一个字符,但消去字符时,倒是正常,一个个消去
我始终不明白我的代码错在哪里你能运行我的代码看看吗
[C] 纯文本查看 复制代码 #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[LEN];
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);
}
} |