我的fscanf输出一个很大的负数

时间:2016-04-28 03:22:39

标签: c file scanf negative-number

在这个程序中,我试图从文件中读取名称和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?

1 个答案:

答案 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)