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

C中的freopen()导致无限循环!,c,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);

我使用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;
}
#包括
#包括
内部主(空)
{
int i,diff,输入的数量,num1,num2;
freopen(“Data.txt”,“r”,stdin);
freopen(“Output.txt”,“w”,stdout);
scanf(“%d”和输入的数量);

对于(i=0;i,除了缺少换行符之外,这在我的机器上似乎运行良好-输出是
101210 14100 200
,当适当换行时,会给出

10 12
10 14
100 200


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

上调用了
fclose()
,除了缺少换行符之外,这在我的机器上似乎运行得很好-输出是
101210 14100 200
,当适当换行时,它会给出

10 12
10 14
100 200


另外,
getch()
是一个奇怪的选择,因为您刚刚在
stdin
上调用了
fclose()
,您的代码需要检查
freopen()
scanf()的返回值

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

freopen()
返回
NULL
以指示错误

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


在这两种情况下,您的代码都可以检查
errno
的值以找出错误的原因。您可能希望使用
peror()

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

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

freopen()
返回
NULL
以指示错误

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


在这两种情况下,您的代码都可以检查
errno
的值,以找出错误的原因。您可能希望使用
peror()

打印它。您需要通过调试器运行代码。我想,这样一来,问题可能会非常明显


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

您需要通过调试器运行代码。我认为,这样一来,问题可能就显而易见了


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

在使用它之前,您可能应该打印
numberofu输入
。如果您更改为
freopen(3),则执行简单的调试任务会容易得多
并替换
scanf(3)
printf(3)
will
fscanf(3)
fprintf(3)
调用——然后可以使用简单的
printf(“num:%d\n”,输入的数量);
并查看循环的距离。:)我试着在我的Ubuntu盒上运行你的代码,注释掉了
#include
getch()
并且它能像预期的那样工作。@sarnold它显示输入的数量=229367249。有人能解释这种奇怪现象吗?在使用它之前,你可能应该打印输入的数量。如果你从
freopen(3)
改为
scanf(3)
printf(3),那么做简单的调试任务会容易得多
will
fscanf(3)
fprintf(3)
调用——然后你可以使用简单的
printf(“num:%d\n”,输入的数量);
看看你循环了多远。:)我已经试着在我的Ubuntu盒上运行你的代码,已经注释掉了
\include
getch()
并且它能按预期工作。@sarnold它显示输入数=22936722 49。有人能合理解释这种奇怪现象吗?我检查了freopen函数的NULL返回值。它似乎工作正常。但是我的Output.txt文件被这些数字填满了2088763392 2088810217很多次,表明在某个地方有一个无限循环。你不知道吗编辑以检查
scanf()的返回值
同样如此。如果第一次调用有效,将返回1,循环中的调用应返回2。我检查了freopen函数的NULL返回值。它似乎工作正常。但我的Output.txt文件中多次充满了这些数字2088763392 2088810217,表明在某个地方有一个无限循环。您需要检查返回值e表示
scanf()
。第一个调用将返回1如果它起作用,循环中的调用应返回2。