在这个程序中,我试图从文件中读取名称和GPA。名字是奥黛丽,然后是白色空间,然后是3.6。 第二行是Oakley,然后是白色空间,3.5。
int main()
{
FILE * fPtr;
FILE * fPtr2;
char x[10] = { "Oakley " };
double y;
int z;
fPtr = fopen("data.txt", "r");
if (fPtr == NULL) // open failure
puts("File open for read failed");
else
{
while (scanf("%d", &z) != EOF)
{
fscanf(fPtr, "%s", x);
fscanf(fPtr, "%lf", &y);
fprintf(stdout, "Value read = %s\n", x);
fprintf(stdout, "GPA = %lf \n", y);
}
}
fclose(fPtr);
system("pause");
return 0;
}
所以,我之前尝试了一次并且它有效。在那次尝试中," x [10] = Audrey"这是列表中的第一个名字。它奏效了,fscanf给了我GPA。第二次,我尝试扫描奥克利,我仍然得到奥黛丽,但当我删除该行时,我得到一个非常大的负数。
我使用了fscanf,因为它在空白处进行了标记,所以我的理论是,如果光标到达正确的名称,那么它将读取下一个数字,那将是GPA?对?我怎样才能搜索Oakley?
答案 0 :(得分:1)
您需要检查scanf
是否有任何错误,因为输入文件与您指定的格式不匹配,可能会发生错误。尝试这些更改:
char user[100];
while (scanf("%s", user) == 1) {
while (fscanf(fPtr, "%s %lf", x, &y) == 2)
{
if (strcmp(user, x) == 0) {
fprintf(stdout, "GPA for %s is %lf \n", user, y);
break;
}
}
rewind(fPtr);
}
此外,fPtr2
在您的代码中未初始化,请删除该行fclose(fPtr2)
。