读取不一致的文件

时间:2014-01-20 09:05:30

标签: c file-io scanf

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

bob 456
echo
cat 
dog 1101
peacock 300

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

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

1 个答案:

答案 0 :(得分: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;
    }
}