为什么这两个不相等?

时间:2013-12-04 12:55:15

标签: c file-io

第一个代码片段

fscanf (Fp, "%d",&Variable);
fseek  (Fp, 2, SEEK_CUR); // Ignore <Enter>: 0x0D 0x0A (Windows Platform)
fread  (&String, sizeof(char), Length, Fp);

第二个代码片段

fscanf (Fp, "%d\r\n",&Variable); // Ignore <Enter>: 0x0D 0x0A (Windows Platform)
fread  (&String, sizeof(char), Length, Fp);

输入文件

13
    Foobar

第一个代码可以在Foobar之前获得四个白色空白,但第二个代码不能。

为什么呢?感谢。

PS:如果可以,请帮我重新命名主题,使其更具体。感谢您的帮助。

2 个答案:

答案 0 :(得分:5)

使用fscanf时,如果在格式字符串中指定一个或多个空格字符,它将从输入中跳过任意数量的空格。你指定的空白字符数或者数量没有区别。因此,在这种情况下,当您将\r\n放入格式字符串时,它实际上会跳过换行符序列和下一行开头的空格。

答案 1 :(得分:1)

来自fscanf的文档...

  

格式字符串由空格字符组成(任何单个字符)   格式字符串中的空格字符占用所有可用字符   来自输入的连续空白字符,

http://en.cppreference.com/w/c/io/fscanf

“\ n”是一个空格字符,所以它占用了所有的空格,直到“Foobar”中的F