我是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返回它可以找到的匹配数量,在您的情况下总是必须为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);
}