【发布时间】:2016-08-22 15:04:21
【问题描述】:
在这个程序中,我试图从一个文件中读取一个名字和他们的 GPA。第一个名字是 Audrey,然后是一个空格,然后是 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。第二次,我尝试扫描 Oakley,我仍然得到 Audrey,但是当我删除该行时,我得到一个非常大的负数。
我使用 fscanf 是因为它在空格周围进行标记,所以我的理论是,如果光标到达正确的名称,那么它将读取下一个数字,这将是 GPA?正确的?如何让它搜索 Oakley?
【问题讨论】:
-
你需要先修复你代码中的一些基本错误,比如
fPtr2从不初始化,然后传递给fclose(),你不检查各种函数的返回值喜欢fscanf()。 -
fscanf并不像您想象的那样“搜索”。它只从当前文件位置读取输入,并根据您指定的格式解析读取的内容。 -
我认为你的同学也在stackoverflow上做same homework。
-
好的,我删除了所有涉及 fPtr2 的内容。那是为了以后。现在我无法将文件位置放到我想要的位置?我该怎么做?
-
您不能直接跳到所需的条目,因为您事先不知道它在哪里。您需要做的是阅读每一行,然后使用
strcmp检查名称是否是您想要的名称。如果不是,则继续读取输入。如果是,那么您已经找到它并可以打印结果。
标签: c file scanf negative-number