另一种避免重置
我得到了一个任务,让一个函数从文本文件中读取并显示10行然后停止并等待您输入anykey,然后再读取10行直到结束。
这就是我所做的
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
FILE * source;
char sentence[80];
source = fopen("source.txt", "r");
while (fgets(sentence, 80, source) != NULL)
{
for (int i = 0; i < 9; i++){
fgets(sentence, 80, source);
printf("%s", sentence);
}
printf("nnn Press [Enter] key to continue.n");
while (getch() != NULL)
{
break;
}
}puts("nnn .....DONE!!");
fclose(source);
}
我的函数的问题是它重复最后一个句子多次因为for循环。
任何想法?
为什么不
int i = 0;
while (fgets(sentence, 80, source) != NULL) //Breaks when fgets fails to read
{
i++;
printf("%s", sentence);
if(i == 10) //10 lines read and printed
{
printf("nnn Press [Enter] key to continue.n");
i = 0; //Reset counter
getch(); //Wait for key press
}
}
如果您想等待用户按输入,使用
int i = 0;
while (fgets(sentence, 80, source) != NULL) //Breaks when fgets fails to read
{
i++;
printf("%s", sentence);
if(i == 10) //10 lines read and printed
{
printf("nnn Press [Enter] key to continue.n");
i = 0;
while(getch() != 13); //Keep looping until enter is pressed
}
}
另一种避免重置
i
值的方法是:
int i = 0;
while (fgets(sentence, 80, source) != NULL) //Breaks when fgets fails to read
{
i++;
printf("%s", sentence);
if(i % 10 == 0) // Same as `if(! (i % 10))`
{
printf("nnn Press [Enter] key to continue.n");
while(getch() != 13); //Keep looping until enter is pressed
}
}
旁注:总是检查fopen
的返回值,看看它是否成功。fopen
失败返回NULL
我不知道这个getch函数,但是我通常在等待回车键时所做的只是如下:
while(getchar()!='n');
但是它有一个问题,如果你使用scanf作为scanf让最后一个输入在缓冲区中按下。