我正在编写一个程序来打开文件,并读取和存储数据。
数据文件的布局显示为name; id#; score; number
即Bobby Ray Reynolds; 111; 10%; 1
如何将这些字段存储在不同的变量中。 这就是我正在尝试的:
fscanf(fp, "%s %d %d %d", name,id,score,number);
答案 0 :(得分:4)
fscanf
的{{1}}格式说明符的问题在于,它到达空格后就会停止。考虑到您的格式,这是不正确的:您正在寻找读取数据,直到分号为止。
这可以通过%s
格式实现。完整的格式字符串还将使用分号作为%[^;]
说明符之间的分隔符,以匹配文件的格式,例如:
%d
请注意上面的fscanf(fp, "%32[^;];%d;%d%%;%d", name, id, score, number);
。此限制应对应于您想读取的最长名称。如果32
是name
个字符的数组,请使用N
作为N-1
和%
之间的值,以避免缓冲区溢出。还要注意第二个[^;]
之后的%%
。这是匹配百分号所必需的(%d
的规则要求第二个%
)。