大家好,我正在编写一个 c 程序,我试图一次从一个文本文件中打印两行,问题是当在最后一行时,如果行是奇数,3 行 5 行。它会打印最后一行两次。我找不到针对这个特定问题的 if 函数的比较。是 bool 值吗? 我目前正在尝试 ferror(file)
FILE *file;
printf("Hello!\n");
printf("Please input file name(without.txt):\n");
scanf("%s", input);
strcat(input,".txt");
file = fopen( input , "r" );
while(!(feof(file)))
{
for(i=0; i<2; i++){
**if(feof(file)==ferror(file))**
{
printf("File ended");
return 0;
}
else
{
fgets(return_char, 200, file);
printf("%s\n", return_char);
}
}
}
输入示例:
我有一只猫
我有一只狗
我有一头牛
预期输出:
第一轮
我有一只猫
我有一只狗
第二轮:
我有一头牛
当前输出: 第一轮:
我有一只猫
我有一只狗
第二轮:
我有一头牛
我有一头牛
最佳答案
您观察到的行为是 foef
的典型行为,它会在事后检查文件结尾。
通常最好使用文件读取函数(fgets
、fgetc
、fread
等)的返回值而不是 feof
。您的循环将如下所示:
while (1) {
for(i=0; i<2; i++) {
if (fgets(return_char, 200, file) == NULL) {
printf("File ended");
return 0;
}
printf("%s", return_char);
}
printf("--\n");
}
或者,没有显式循环 i
和外部无限循环框架:
i = 0;
while (fgets(return_char, 200, file)) {
printf("%s", return_char);
if (i == 1) printf("--\n");
i = 1 - i;
}
printf("File ended");
return 0;
关于与 feof 的语法比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25642711/