C 将语法与feof进行比较

C 将语法与feof进行比较,c,feof,C,Feof,大家好,我正在编写一个c程序,我试图一次打印一个文本文件中的两行。问题是,当最后一行是奇数行时,3行5行。它会打印最后一行两次。我找不到这个问题的if函数的比较。这是一个布尔吗? 我正在尝试ferror(文件) FILE *file; printf("Hello!\n"); printf("Please input file name(without.txt):\n"); scanf("%s", input); strcat(input,".txt")

大家好,我正在编写一个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);
        }
    }

    }
文件*FILE;
printf(“你好!\n”);
printf(“请输入文件名(不带.txt):\n”);
扫描频率(“%s”,输入);
strcat(输入“.txt”);
文件=fopen(输入,“r”);
而(!(feof(文件)))
{

对于(i=0;i,您观察到的行为是典型的
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");
}
试试这个代码-

#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--;
                }
        }
}
#包括
#包括
int main()
{
int i;
文件*文件;
字符输入[20],返回字符[50],ch;
printf(“你好!\n”);
printf(“请输入文件名(不带.txt):\n”);
扫描频率(“%s”,输入);
strcat(输入“.txt”);
文件=fopen(输入,“r”);
i=2;
while(fgets(返回字符,200,文件))
{
如果(i==0){
printf(“是否要继续(是/否)\n”);
scanf(“%c”和“ch”);
如果(ch='y'){
printf(“%s\n”,返回字符);
i=1;//使i=1读取下一行。
}
否则{
fclose(文件);
返回0;
}
}
否则{
printf(“%s\n”,返回字符);
我--;
}
}
}

在这个程序中,当
i=0
时,
return\u char
将有文件的第三行。因此我再次使
i=1
读取下一行,依此类推。

“while(!feof(file))”始终是错误的。您好,谢谢您的回复。我已更改并正在使用您建议的内容,它仍然由相同的错误组成,第一个字母丢失。现在输出是有一只猫,我有一只狗。第二个输出是有一头牛有一个牛停止使用
feof
ferror
。循环直到
fgets
失败s、
while(fgets(return\u char,200,file)!=NULL){
while(fgets(return\u char,200,file)){
@wildplasser:噢,当然了:第二个示例的条件错误(我更喜欢你的第二种语法)。我会解决的,谢谢。@MOehm剩下的唯一问题是,我将提示用户输入第二轮循环,而我在(1)时无法使用该循环@user3809384:恐怕我不明白您想要什么。如果文件的行数为奇数,是否要以交互方式提示用户输入第二个字符串?否。对于前两行,它将自动显示,对于后面的2行,将提示用户继续或退出。将读取的.txt将给出3行。当用户如果选择继续,它会返回第三行两次。我已经尝试了许多不同的循环,它要么全部工作,要么一直重复第三行。@MOehm
#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--;
                }
        }
}