fscanf在这个C代码中失败了

时间:2012-06-12 20:31:17

标签: c file-io scanf

因此,作为一名新实习生,我需要修复其中一些人编写的大量脏代码。下面是一个片段,我有一个小问题,弄清楚究竟是什么问题:

for (i=0; i<TOOL_LIMIT; i++)
        {
                if ( 0 >= fscanf(fp,"%s %s %s %s %s %s %s\n",coreData[i][0],\
coreData[i][1],coreData[i][2],coreData[i][3],coreData[i][4],coreData[i][5], coreData[i][6]))
                {
                        break;
                }
                totalCases++;
        }
        fclose(fp);

基本上,fp会打开一些具有以下正则表达式模式的文件:

data11 data12 data13 data14...data17
data21 data22 data23 data24...data27
...

我觉得这段代码的工作方式也不如预期。基本上,它假设读取文件的每一行,并填写数组coreData,如图所示。我不认为fscanf就像它在这里展示一样,但我可能错了。 这段代码是否正常工作?我有一段时间没用c做文件io。

编辑;; 对不起,应该简要概述一下失败。 基本上,C脚本是一个cgi脚本,它接受一些输入(有错误的文件)并将这些文件与fp打开的文件中的数据匹配(称之为'fp_file'),并生成一个html表。如果带有错误的文件出现在fp_file中,那么它会输出一些额外的信息(如data12等),否则会将该表中的条目留空。 例 发现文件f01有错误 我们现在检查fp是否为'f01',如果它存在,我们会显示有关该文件的更多信息(作者等)。

我所看到的是只有一个文件正确匹配(fp的第一行)。除此之外,其余的错误文件还有一个空白区域。

1 个答案:

答案 0 :(得分:1)

此代码读取由空格分隔的六个单词组,并将它们存储在coreData数组中。

我认为只要输入行有六个由空格分隔的单词,它就能正常工作。您可以稍微加强条件,并在fscanf返回不同于6的值时从循环中断(fscanf返回成功读取的元素数)。