我试图从名为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的所有值,因此它必须跳过第一个数字。为什么我不知道。。。

最佳答案

你在这里做错了什么:

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);
}

关于c - fscanf返回每隔一行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23679426/

10-09 08:56