文件无限输入

时间:2014-03-19 19:37:24

标签: 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。但什么都没发生。我不明白问题出在哪里。

2 个答案:

答案 0 :(得分:2)

也许问题是你对scanf()的调用将拒绝任何不能被解释为整数的东西并将其保留在输入缓冲区中。下次拨打scanf()时,非数字字符仍然存在,同样的事情会再次发生。

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

答案 1 :(得分:0)

可能会出现转换问题,请尝试不使用MINUS ONE(-1),例如:

if(number==99)
{
   break;
}

或者你也可以尝试另一种方法:

i=0
do {
    scanf("%d", &number);       
    putw(number,f1);
    i++
} while (i <= 10 && number != -1);