c - 文件无限地接受输入

标签 c file-io

我有以下 C 程序:

#include <stdio.h>

int main()
{
    FILE *f1, *f2, *f3;
    int number, i;

    printf("Contents of data file\n\n");

    f1=fopen("DATA", "w");

    for(i=1; i<=10; i++)
    {
        scanf("%d", &number);

        if(number==-1)
        {
            break;
        }

        putw(number,f1);
    }
    fclose(f1);
    f1=fopen("DATA","r");
    f2=fopen("ODD","w");
    f3=fopen("EVEN","w");

    while((number==getw(f1)) != EOF)
    {
        if(number%2==0)
        {
            putw(number,f3);
        }

        else
        {
            putw(number,f2);
        }
    }

    fclose(f1);
    fclose(f2);
    fclose(f3);

    f2=fopen("ODD","r");
    f2=fopen("EVEN","r");

    printf("Contents on ODD file:");
    while((number=getw(f2)) != EOF)
    {
        printf("%4d", number);
    } 

    printf("Contents on EVEN file:");
    while((number=getw(f3)) != EOF)
    {
        printf("%4d", number);
    }

    fclose(f2);
    fclose(f3);

    return 0;

}

该程序正在无限地获取FILE f1的输入。按-1后,它应该被终止。但事实并非如此!我已按下 CTRL+D。但什么也没发生。我不明白问题出在哪里。

最佳答案

也许问题在于您对 scanf() 的调用将拒绝任何无法解释为整数的内容,并将其保留在输入缓冲区中。下次调用 scanf() 时,非数字字符仍然存在,并且同样的事情会再次发生。

This page更详细地解释了这个问题。

关于c - 文件无限地接受输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22516398/

相关文章:

c++ - Linux 上良好的文本文件 IO C/C++ 指南

c++ - 关于文件I/O的疑问

c - 链接器是否查找头文件

c++ - wifstream相当于_wfopen的 "mode"参数?

c - 使用 C 互操作性时看不到断点

c内存泄漏问题

java - 读取/写入 XML

c++ - 在 C++ 中使用 ifstream 逐行读取文件

这段代码可以包含缓冲区溢出吗?

C:分配限制