将scanf中的空格(“%c”,&ch)替换为scanf(“%c”,&ch)的目的是什么?

像这样在scanf中放置空格的目的是什么

 scanf(" %c",&ch) 

代替

 scanf("%c",&ch)? 

fflush(stdin)输入缓冲区是什么?

因为%c之前的空格忽略了所有空格。 *scanf系列函数在默认情况下忽略所有空格,除了%c%[%n 。 这在C11中提到:

7.21.6.2.8

除非规范包含[,c或n说明符,否则将跳过输入的空白​​字符(由isspace函数指定)。

要完成,这里的部分表示将忽略所有空格:

7.21.6.2.5

由白色空格字符组成的指令通过读取第一个非空白字符(仍然未读取)的输入来执行,或者直到不再能够读取字符为止。 该指令永远不会失败。


关于你的第二个问题, fflush(stdin)导致未定义的行为,不得使用(强调我的):

7.21.5.2.2

如果流指向输入流或未输入最近操作的更新流 ,则fflush函数会将该流的任何未写入数据传送到主机环境以写入该文件; 否则,行为未定义

将scanf中的空格(“%c”,&ch)替换为scanf(“%c”,&ch)的目的是什么?

因此, scanf会在流中遇到第一个非空格字符之前忽略所有空格。

fflush(stdin)中的输入缓冲区是什么?

您输入控制台的内容将存在于stdin流中。

但是,不要刷新该流,这是未定义的行为 。 如果要放弃在调用scanf后输入的字符,可以阅读并丢弃它们。

在这种情况下,scanf中的空格告诉scanf忽略您读取的字符前面的任何前导空格字符。 即使角色前面没有空格,代码也能正常工作并成功读取角色。

我不确定你在上一个问题中提到了什么,但是stdin是你程序的标准输入流。

 scanf(" %c",&ch); 

根据手册页 ,

格式字符串中的空格(如空格,制表符或换行符)在输入中匹配任意数量的空格, 包括无空格。

Stdin是标准输入。用户输入程序的数据,首先将其存储在缓冲区中,然后当程序通过使用读取操作请求数据传输时,数据可供程序使用。 (使用scanf等)。

我前一段时间遇到同样的问题,如果我尝试使用scanf ("%c", &ans);读取变量scanf ("%c", &ans); 它不会读任何东西。 因此我发现正在读取最后一个输入的\n字符。

因此,做scanf (" %c", &ans); 解决了我的问题。

虽然,我无法清楚地理解你的第二个问题。

只是为了给最后一个对象提供一个空格,如果不是,例如一个字符串,一切都将在它们之间没有空格。