嗨,伙计们,我正在这里编写一个c程序,我试图一次从一个文本文件中打印两行,问题是当在最后一行时,如果行是奇数,3行5行。它会打印最后一行两行,我找不到关于这个粒子问题的if函数的比较。是个坏蛋吗?我目前正在尝试ferror(文件)
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);
}
}
}输入实例:
我有只猫
我有一只狗
我有一头牛
预期产出:
第一轮
我有只猫
我有一只狗
第二轮:
我有一头牛
当前产出:第一轮:
我有只猫
我有一只狗
第二轮:
我有一头牛
我有一头牛
发布于 2014-09-03 12:23:42
试试这个密码-
#include<stdio.h>
#include<string.h>
int main()
{
int i;
FILE *file;
char input[20],return_char[50],ch;
printf("Hello!\n");
printf("Please input file name(without.txt):\n");
scanf("%s", input);
strcat(input,".txt");
file = fopen( input , "r" );
i=2;
while(fgets(return_char, 200, file))
{
if(i==0){
printf("Do you want to continue(y/n)\n");
scanf(" %c",&ch);
if(ch == 'y'){
printf("%s\n", return_char);
i=1; // making i=1 to read further line.
}
else{
fclose(file);
return 0;
}
}
else{
printf("%s\n", return_char);
i--;
}
}
}在这个程序中,当i=0时,return_char将有文件的第三行。因此,我再次制作i=1来阅读下一行,等等。
发布于 2014-09-03 11:24:59
您所观察到的行为是典型的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;https://stackoverflow.com/questions/25642711
复制相似问题