fscanf()可以读取空格吗?

Gra*_*oob 6 c string file-io

我已经有了一些代码来读取文本文件fscanf(),现在我需要对它进行修改,以便之前没有空格的字段需要允许空格.文本文件基本上是以下形式:

标题:数据
标题:数据
等......

这是基本使用解析fgets(inputLine, 512, inputFile); sscanf(inputLine, "%*s %s", &data);,读的数据字段,忽略了冠军,但现在的一些数据字段需要允许的空间.我仍然需要在它之后立即忽略标题和空格,然后读取包括空格在内的其余行.

无论如何使用该sscanf()功能吗?

如果没有,我可以对代码进行最小的更改以正确处理空白?

更新:我编辑了用fgets()+ sscanf()替换fscanf()的问题,这是我的代码实际使用的.当我第一次写这个问题时,我并不认为它是相关的,这就是我将它简化为fscanf()的原因.

pmg*_*pmg 13

如果你不能使用fgets()使用%[转换符(带有"排除选项"):

char buf[100];
fscanf(stdin, "%*s %99[^\n]", buf);
printf("value read: [%s]\n", buf);
Run Code Online (Sandbox Code Playgroud)

但是fgets()更好.


编辑:带fgets()+的版本sscanf()

char buf[100], title[100];
fgets(buf, sizeof buf, stdin); /* expect string like "title: TITLE WITH SPACES" */
sscanf(buf, "%*s %99[^\n]", title);
Run Code Online (Sandbox Code Playgroud)

  • 对于这种特殊情况,"fgets"如何"更好"? (3认同)
  • @Calmarius:是的,它是标准C89.我没有C89的参考资料,但您可以在[标准C99中的7.19.6.2](http://port70.net/~nsz/c/c99/n1256.html#7.19.6.2)中阅读. (2认同)