c - fscanf 在此 C 代码中失败

标签 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 的第一行)。除此之外,其余的错误文件都有一个空格。

最佳答案

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

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

关于c - fscanf 在此 C 代码中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11004389/

相关文章:

c - 使用 Scanf 读取随机长度的方程

c - 如何从头开始编写交叉编译器?

file-io - 与平台无关的文件锁定?

python - 如何在 Pyrex 中定义初始化的 C 数组?

java - 如何使用java在linux/ubuntu上获取usb设备的绝对路径

c++ - 试图操纵影响数组 C++ 的 isspace 函数

c - 程序不读取和打印字符

c - 如何使用 scanf - C 处理比预期少的输入

c - 使用Visual Studio(2017)构建Apache APR 1.7,IF_NAMESIZE未定义

c - 内核 Makefile 不会为我的模块创建任何 .ko 文件