C中的freopen()导致无限循环!
我使用C中的freopen()函数从文件data.txt读取数据,并将相同的数据写入输出文件output.txt。这就是我编写的代码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);
#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)
willfscanf(3)
和fprintf(3)
调用——然后可以使用简单的printf(“num:%d\n”,输入的数量);
并查看循环的距离。:)我试着在我的Ubuntu盒上运行你的代码,注释掉了#include
和getch()
并且它能像预期的那样工作。@sarnold它显示输入的数量=229367249。有人能解释这种奇怪现象吗?在使用它之前,你可能应该打印输入的数量。如果你从freopen(3)
改为scanf(3)
和printf(3),那么做简单的调试任务会容易得多
willfscanf(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。