C - 使用fscanf从文件

时间:2015-09-11 16:54:54

标签: c eof scanf

我对C有点新,但基本上我有一个问题,我需要从文件中读取'-1'。遗憾的是,这意味着我遇到了文件的过早结束,因为我的编译器中的EOF常量也是-1。

对此有什么样的解决方法?是否有其他功能我可以用它来读取它会将EOF改为我可以使用的东西?

提前致谢。

人们要求的代码

int read() {
    int returnVal; // The value which we return

    // Open the file if it isn't already opened
    if (file == NULL) {
        file = fopen(filename, "r");
    }

    // Read the number from the file
    fscanf(file, "%i", &returnVal);

    // Return this number
    return returnVal;
}

然后将此数字与EOF进行比较。

好的,这可能是不好的做法,但我将代码更改为以下

int readValue() {
    int returnVal; // The value which we return

    // Open the file if it isn't already opened
    if (file == NULL) {
        file = fopen(filename, "r");
    }

    // Read the number from the file
    fscanf(file, "%i", &returnVal);

    if (feof(file)) {
        fclose(file);
        return -1000;
    }

    // Return this number
    return returnVal;
}

因为我知道我永远不会从我的文件中读到任何这样的数字(它们的范围大约是[-300,300]。感谢你们的帮助!

2 个答案:

答案 0 :(得分:4)

fscanf的返回值不是读取的值,而是成功读取的项目数,如果发生错误则为EOF。

答案 1 :(得分:1)

问题是您的read函数无法区分成功读取和错误条件。您应该将其更改为接受int *作为scanf写入的参数,并且该函数应在成功读取时返回类似0的值,并在出错时返回-1。您可以使用scanf的返回值作为函数返回的基础。

此外,还有一个名为read的系统调用,因此您应该将其命名为其他内容。并且不要忘记函数末尾的fclose(file),否则就会泄漏文件描述符。