在C中打开文件后fscanf出现问题

时间:2018-09-05 23:20:28

标签: c

我正在编写一个程序来打开文件,并读取和存储数据。

数据文件的布局显示为name; id#; score; number

即Bobby Ray Reynolds; 111; 10%; 1

如何将这些字段存储在不同的变量中。 这就是我正在尝试的:

    fscanf(fp, "%s %d %d %d", name,id,score,number);

1 个答案:

答案 0 :(得分:4)

fscanf的{​​{1}}格式说明符的问题在于,它到达空格后就会停止。考虑到您的格式,这是不正确的:您正在寻找读取数据,直到分号为止。

这可以通过%s格式实现。完整的格式字符串还将使用分号作为%[^;]说明符之间的分隔符,以匹配文件的格式,例如:

%d

请注意上面的fscanf(fp, "%32[^;];%d;%d%%;%d", name, id, score, number); 。此限制应对应于您想读取的最长名称。如果32name个字符的数组,请使用N作为N-1%之间的值,以避免缓冲区溢出。还要注意第二个[^;]之后的%%。这是匹配百分号所必需的(%d的规则要求第二个%)。