C读取文件与前导空格翻倍

时间:2014-10-04 13:55:18

标签: c scanf

我有一个带有两行标题的文件,其余的包含两列双数据,如

    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

我错过了什么吗?

1 个答案:

答案 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",...扫描可选的前导空格,然后扫描双倍。 " "。

"%lf"限制非空白fscanf("%16lf",...扫描到16的总数。