C中的freopen()导致无限循环!

时间:2011-04-11 09:14:21

标签: c

我在C中使用freopen()函数从文件 Data.txt 中读取数据,并将相同的数据写入输出文件 Output.txt 。这是我写的代码是为了做到这一点。

#include<stdio.h>
#include<conio.h>

int main(void)
{
    int i,diff,number_of_inputs,num1,num2;
    freopen("Data.txt","r",stdin);
    freopen("Output.txt","w",stdout);
    scanf("%d",&number_of_inputs);
    for(i=0;i<number_of_inputs;i++)
    {
        scanf("%d %d",&num1,&num2);
        printf("%d %d",num1,num2);  
    }
    fclose(stdin);
    fclose(stdout);
    getch();
    return 0;
}

Data.txt 文件包含:
3
10 12
10 14
100 200

但是输出文件包含大量的垃圾数,给人一种无限循环的印象。有人告诉我哪里出错了?

3 个答案:

答案 0 :(得分:2)

您的代码需要检查freopen()scanf()的返回值。

来自这两个函数的意外返回值将为您提供有关出错的线索。

freopen()返回NULL表示错误。

scanf()会返回已转换的项目数,或EOF

在任何一种情况下,您的代码都可以检查errno的值,以找出导致错误的原因。您可能希望使用perror()打印它。

答案 1 :(得分:2)

您需要通过调试器运行代码。我认为那问题可能是显而易见的。

话虽如此,您对任何库调用执行错误检查。如果其中任何一个失败,您的变量中只会有垃圾值。

答案 2 :(得分:1)

除了缺少换行符之外,我的机器似乎运行正常 - 输出为10 1210 14100 200,在适当换行时,会给出

10 12
10 14
100 200

另外,getch()是一个奇怪的选择,因为您刚刚在fclose()上致电stdin