为什么scanf不遵循带有非空白字符的文档?

Car*_*zón 0 c scanf

scanf上文档说明格式中的任何"非空格字符"会导致函数从流中读取下一个字符,将其与此非空白字符进行比较,如果匹配,则将其丢弃并继续执行格式的下一个字符.如果字符不匹配,则函数失败,返回并保留流的后续字符未读.

但是,如果我跑:

int x;
while(scanf("\n%d",&x)==1) printf("%d\n",x);
Run Code Online (Sandbox Code Playgroud)

通过以下输入:

1 2
Run Code Online (Sandbox Code Playgroud)

它打印:

1
2
Run Code Online (Sandbox Code Playgroud)

鉴于这两个数字中没有'\n',为什么scanf会读取它们?这不是针对文档的吗?

R S*_*ahu 5

在链接到您引用的段落之前的同一页面上,我看到:

  • 空白字符:该函数将读取并忽略在下一个非空白字符之前遇到的任何空格字符(空格字符包括空格,换行符和制表符 - 请参阅isspace).格式字符串中的单个空格验证从流中提取的任何数量的空白字符(包括无).

A \n是一个空白字符.

因此,电话

scanf("\n%d",&x)
Run Code Online (Sandbox Code Playgroud)

stdio在读取数据之前,将提取并丢弃任意数量的空白字符&x.