C: fscanf 问题(重复输出)
C: issues with fscanf (repetitive output)
我是 C 编程的新手。我尝试了以下代码,它将简单地从名为 "student_data.txt" 的文件中打印控制台中的信息。代码在这里:
#include <stdio.h>
int main()
{
FILE* fp;
fp = fopen("student_data.txt", "r");
if (!fp)
{
perror("Error: ");
return 1;
}
/*
The file is this:
id 1
name abc
total_gpa 9.55
hsc 4.55
ssc 5.0
id 2
name def
total_gpa 9.55
hsc 5.0
ssc 4.55
id 3
name xyz
total_gpa 8.00
Alevel 4.0
Olevel 4.0
id 4
name pqr
total_gpa 10
hsc 5.0
ssc 5.0
id 5
name ali
total_gpa 9.67
hsc 4.67
ssc 5.0
id 6
name hasan
total_gpa 7.5
Alevel 3.5
Olevel 4.0
id 7
name kamal
total_gpa 7.5
Alevel 4.0
Olevel 3.5
*/
char input[10][30];
while(!feof(fp))
{
for(int i = 0; i < 10; i++)
{
fscanf(fp, "%s", input[i]);
}
for(int i = 0; i < 10; i++)
{
printf("%s ", input[i]);
if(i % 2 == 1)
{
printf("\n");
}
}
printf("\n");
}
fclose(fp);
}
当我运行代码时,输出显示两次id 7的信息。我不知道如何解决这个问题。 while循环有没有问题?
.....
id 7
name kamal
total_gpa 7.5
Alevel 4.0
Olevel 3.5
id 7
name kamal
total_gpa 7.5
Alevel 4.0
Olevel 3.5
提前致谢。
fscanf returns 它可以找到的匹配项数量,在您的情况下必须始终为 1,这意味着如果它不是 1,您可以停止。
这应该可以解决问题:
#include <stdbool.h>
#include <stdio.h>
int main()
{
FILE* fp;
fp = fopen("student_data.txt", "r");
if (!fp)
{
perror("Error: ");
return 1;
}
char input[10][30];
while(1)
{
bool end = false;
for(int i = 0; i < 10; i++)
{
if (fscanf(fp, "%s", input[i]) != 1){
end = true;
}
}
if (end) break;
for(int i = 0; i < 10; i++)
{
printf("%s ", input[i]);
if(i % 2 == 1)
{
printf("\n");
}
}
printf("\n");
}
fclose(fp);
}
我是 C 编程的新手。我尝试了以下代码,它将简单地从名为 "student_data.txt" 的文件中打印控制台中的信息。代码在这里:
#include <stdio.h>
int main()
{
FILE* fp;
fp = fopen("student_data.txt", "r");
if (!fp)
{
perror("Error: ");
return 1;
}
/*
The file is this:
id 1
name abc
total_gpa 9.55
hsc 4.55
ssc 5.0
id 2
name def
total_gpa 9.55
hsc 5.0
ssc 4.55
id 3
name xyz
total_gpa 8.00
Alevel 4.0
Olevel 4.0
id 4
name pqr
total_gpa 10
hsc 5.0
ssc 5.0
id 5
name ali
total_gpa 9.67
hsc 4.67
ssc 5.0
id 6
name hasan
total_gpa 7.5
Alevel 3.5
Olevel 4.0
id 7
name kamal
total_gpa 7.5
Alevel 4.0
Olevel 3.5
*/
char input[10][30];
while(!feof(fp))
{
for(int i = 0; i < 10; i++)
{
fscanf(fp, "%s", input[i]);
}
for(int i = 0; i < 10; i++)
{
printf("%s ", input[i]);
if(i % 2 == 1)
{
printf("\n");
}
}
printf("\n");
}
fclose(fp);
}
当我运行代码时,输出显示两次id 7的信息。我不知道如何解决这个问题。 while循环有没有问题?
.....
id 7
name kamal
total_gpa 7.5
Alevel 4.0
Olevel 3.5
id 7
name kamal
total_gpa 7.5
Alevel 4.0
Olevel 3.5
提前致谢。
fscanf returns 它可以找到的匹配项数量,在您的情况下必须始终为 1,这意味着如果它不是 1,您可以停止。
这应该可以解决问题:
#include <stdbool.h>
#include <stdio.h>
int main()
{
FILE* fp;
fp = fopen("student_data.txt", "r");
if (!fp)
{
perror("Error: ");
return 1;
}
char input[10][30];
while(1)
{
bool end = false;
for(int i = 0; i < 10; i++)
{
if (fscanf(fp, "%s", input[i]) != 1){
end = true;
}
}
if (end) break;
for(int i = 0; i < 10; i++)
{
printf("%s ", input[i]);
if(i % 2 == 1)
{
printf("\n");
}
}
printf("\n");
}
fclose(fp);
}