首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >语法与feof的比较

语法与feof的比较
EN

Stack Overflow用户
提问于 2014-09-03 11:05:19
回答 2查看 95关注 0票数 0

嗨,伙计们,我正在这里编写一个c程序,我试图一次从一个文本文件中打印两行,问题是当在最后一行时,如果行是奇数,3行5行。它会打印最后一行两行,我找不到关于这个粒子问题的if函数的比较。是个坏蛋吗?我目前正在尝试ferror(文件)

代码语言:javascript
复制
    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);
        }
    }

    }

输入实例:

我有只猫

我有一只狗

我有一头牛

预期产出:

第一轮

我有只猫

我有一只狗

第二轮:

我有一头牛

当前产出:第一轮:

我有只猫

我有一只狗

第二轮:

我有一头牛

我有一头牛

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-03 12:23:42

试试这个密码-

代码语言:javascript
复制
#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来阅读下一行,等等。

票数 0
EN

Stack Overflow用户

发布于 2014-09-03 11:24:59

您所观察到的行为是典型的foef,它在事后检查文件的末尾.

通常最好使用文件读取函数(fgetsfgetcfread等)的返回值。而不是feof。然后您的循环将如下所示:

代码语言:javascript
复制
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和外部无限循环框架上没有显式循环:

代码语言:javascript
复制
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;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25642711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档