读取不一致的文件

cok*_*ude 0 c file-io scanf

C中哪些文件读取器可以处理读取不一致的文件?有时文件是"字号",有时它只是"字".像这样.

bob 456
echo
cat 
dog 1101
peacock 300
Run Code Online (Sandbox Code Playgroud)

这就是我用fscanf尝试过的.我很惊讶它的工作原理.我不认为fscanf喜欢不一致的文件.有什么我需要担心的吗?我知道如果你不小心,fscanf会有非常糟糕的副作用.

while (fscanf(pFile, "%s %d",  nam, &val) !=EOF)
{
    //my work
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*art 5

你需要仔细阅读文档fscanf:

成功完成后,这些功能将返回成功匹配和分配的输入项目的数量; 如果早期匹配失败,此数字可以为零.如果输入在第一次匹配失败或转换之前结束,则返回EOF.如果发生读错误,则设置流的错误指示符,返回EOF,并设置errno以指示错误.

我会做这样的事情:

while (TRUE) {
    int matched = fscanf(pFile, "%s %d", nam, &val);

    if (matched == 2) {
        // nam and val are valid
    } else if (matched == 1) {
        // only nam was assigned
    } else {   // Includes EOF case
        // Nothing was assigned
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)