fscanf每隔一行返回一次
我试图从名为fscanf每隔一行返回一次,c,eof,scanf,skip,C,Eof,Scanf,Skip,我试图从名为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
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;
}
这个代码有什么问题
我编辑了这个问题,因为我要到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;
#包括
int main()
{
文件*handle_in1=fopen(“part_1.txt”,“r”);
文件*handle_in2=fopen(“part_2.txt”,“r”);
文件*handle_out=fopen(“parts.txt”、“w”);
int扫描;
if(handle_in1==NULL | | handle_in2==NULL)
{
printf(“无法处理文件”);
}
其他的
{
fscanf(句柄在1、%d、&scan中);
while(fscanf(handle_in1、%d、&scan)!=EOF)
{
printf(“编号为%d\n”,扫描);
}
}
返回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)
{
fscanf(handle_in1, "%d", &scan);
printf("Number is %d\n", scan);
}
解决办法是:
在循环的迭代中仅使用一个scanf
因此,它将成为(这是一个解决方案):
第二个问题的解决方案是,您必须在
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正在删除文件的第一行。第二个问题的解决方案是,您必须在
else
之后和之前删除第一行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正在删除文件的第一行。此解决方案有一点帮助,但它仍然会跳过txt文件中的第一个数字……这不应该跳过。从前面的结果可以看出,这跳过了第一个数字,因为在打印之前有两个scanf
语句。现在只有一个,逻辑上应该可以正常工作。我正在使用代码块,我已经检查了多次。我将我第一篇文章中的代码的编辑版本复制粘贴到IDE中,它仍然跳过第一个数字:101。这个解决方案有一点帮助,但它仍然跳过txt文件中的第一个数字…这不应该跳过。从前面的结果可以看出,这跳过了第一个数字,因为在打印之前有两个scanf
语句。现在只有一个,逻辑上应该可以正常工作。我正在使用代码块,我已经检查了多次。我将我第一篇文章中的代码的编辑版本复制粘贴到我的IDE中,但它仍然跳过了第一个数字:101。你可能应该把它交给tod,因为他确实回答了你的问题。我刚刚在你的实现中发现了一个问题。你应该把它交给托德,因为他确实回答了你的问题。我刚刚发现您的实现中存在一个问题。