我正在尝试从名为part_1.txt
的文件中读取数字,其中包含以下数据:
101
102
103
104
105
106
107
108
109
这是我正在使用的代码:
#include <stdio.h>
int main()
{
FILE *handle_in1 = fopen("part_1.txt", "r");
FILE *handle_in2 = fopen("part_2.txt", "r");
FILE *handle_out = fopen("parts.txt", "w");
int scan;
if(handle_in1 == NULL || handle_in2 == NULL)
{
printf("File(s) could not be handled.");
}
else
{
while(fscanf(handle_in1, "%d", &scan) != EOF)
{
fscanf(handle_in1, "%d", &scan);
printf("Number is %d\n", scan);
}
}
return 0;
}
代码应该在屏幕上打印出存储在文件中的每个值,直到文件结束。 相反,它打印出所有其他值(和最后一个值),如下所示:
Number is 102
Number is 104
Number is 106
Number is 108
Number is 109
此代码有什么问题?
我编辑了这个问题,因为我不能在8小时之前发布答案。以下版本是新版本:
#include <stdio.h>
int main()
{
FILE *handle_in1 = fopen("part_1.txt", "r");
FILE *handle_in2 = fopen("part_2.txt", "r");
FILE *handle_out = fopen("parts.txt", "w");
int scan;
if(handle_in1 == NULL || handle_in2 == NULL)
{
printf("File(s) could not be handled.");
}
else
{
fscanf(handle_in1, "%d", &scan);
while(fscanf(handle_in1, "%d", &scan) != EOF)
{
printf("Number is %d\n", scan);
}
}
return 0;
}
该程序的编辑版本为我提供了值:102,103,104,105,106,107,108和109.如果我编辑txt文件并在txt文件的顶部放一个额外的101,那么它从101到109一直给出值,因此它必须跳过第一个数字。为什么这样做我不知道...
答案 0 :(得分:3)
你在这里做错了什么:
while(fscanf(handle_in1, "%d", &scan) != EOF)
{
fscanf(handle_in1, "%d", &scan);
printf("Number is %d\n", scan);
}
解决方案是:
在循环的迭代中只使用一个scanf
。
所以它会成为(这是一个解决方案):
while(fscanf(handle_in1, "%d", &scan) != EOF)
{
printf("Number is %d\n", scan);
}
答案 1 :(得分:2)
第二个问题的解决方案是你必须在else
之后和while
之前删除第一个fscanf行
FILE *handle_in1 = fopen("part_1.txt", "r");
int scan;
if(handle_in1 == NULL ){
printf("File(s) could not be handled.");
} else {
/* fscanf(handle_in1, "%d", &scan);*/ // this line is unnecessary
while(fscanf(handle_in1, "%d", &scan) != EOF) {
printf("Number is %d\n", scan);
}
}
return 0;
fscanf正在删除文件的第一行。