我有一个带有两行标题的文件,其余的包含两列双数据,如
0.0030556304 -0.0078125
第一列是16个字符长,第二列是17个字符长,在有空格和'\ n'之后。
我读取此文件的代码是
nscan = fscanf(sound_file, "%lf %lf %c", &value1,
&value2,
&termch);
我使用termch
进一步测试换行符。
我试过
nscan = fscanf(sound_file, "%16lf %16lf %c", &value1,
&value2,
&termch);
太
但是当我用
打印时printf("%f %f\n", value1, value2);
结果是
-0.000000 -0.000000
我错过了什么吗?
答案 0 :(得分:1)
fscanf(sound_file, "%lf %lf %c"...
没有按你的想法行事。
"%c"
之前的空格会消耗所有空白区域,包括' '
和'\n'
。以下"%c"
将使用下一个char
(此时必须为非空格),如果有的话。
最好使用fgets()
读取所有文件行,然后使用sscanf()
扫描缓冲区
char buf[100];
// Read 2 header lines and toss
if (fgets(buf, sizeof buf, sound_file) == NULL) Handle_EOForIOError();
if (fgets(buf, sizeof buf, sound_file) == NULL) Handle_EOForIOError();
// Insure code is using a type the match format specifiers
// Could be a problem in OP's unposted code.
double value1, value2;
while (fgets(buf, sizeof buf, sound_file) != NULL) [
int cnt = sscanf(buf, "%lf%lf", &value1, &value2);
if (cnt != 2) Handle_MissingData();
else Use(value1, value2);
}
fscanf("%lf",...
扫描可选的前导空格,然后扫描双倍。 1}}之前的前导" "
。
"%lf"
将限制非空白fscanf("%16lf",...
扫描到16的总数。