我在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
但是输出文件包含大量的垃圾数,给人一种无限循环的印象。有人告诉我哪里出错了?
答案 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