what is the purpose of putting a space in scanf
like this
scanf(" %c",&ch)
in place of
scanf("%c",&ch)?
Also what is input buffer in fflush(stdin)
?
what is the purpose of putting a space in scanf
like this
scanf(" %c",&ch)
in place of
scanf("%c",&ch)?
Also what is input buffer in fflush(stdin)
?
因为之前的%c
空格忽略了所有的空格。*scanf
默认情况下,函数族忽略任何空格之前的所有空格,%
除了%c
,%[
和%n
. 这在 C11 中提到:
7.21.6.2.8
输入空白字符(由 isspace 函数指定)将被跳过,除非规范包含 [、c 或 n 说明符。
为了完整起见,这里是说所有空格都将被忽略的部分:
7.21.6.2.5
由空白字符组成的指令通过读取输入直到第一个非空白字符(仍然未读取)或直到无法读取更多字符来执行。该指令永远不会失败。
关于你的第二个问题,fflush(stdin)
导致未定义的行为,不得使用(强调我的):
7.21.5.2.2
如果 stream 指向未输入最近操作的输出流或更新流,则 fflush 函数会导致该流的任何未写入数据被传递到主机环境以写入文件;否则,行为是 undefined。
像这样scanf(“%c”,&ch)在scanf中放置一个空格代替scanf(“%c”,&ch)的目的是什么?
因此,这scanf
将在流中遇到第一个非空格字符之前忽略所有空格。
还有什么是 fflush(stdin) 中的输入缓冲区?
您输入到控制台的内容将存在于stdin
流中。
但是,不要刷新该流,它是未定义的行为。如果要丢弃scanf
调用后输入的字符,可以读取并丢弃它们。
在这种情况下,scanf 中的空格告诉 scanf 忽略您读取的字符前面的任何前导空白字符。即使字符前面没有空格,代码仍然可以正常工作并成功读取字符。
我不确定您在上一个问题中要问什么,但 stdin 是您程序的标准输入流。
前段时间我遇到了同样的问题,如果我尝试使用scanf ("%c", &ans);
它读取变量,则不会读取任何内容。因此,我发现\n
上次输入的字符正在被读取。
因此,这样做scanf (" %c", &ans);
解决了我的问题。
虽然,我无法清楚地理解你的第二个问题。
只是为了给最后一个对象留一个空格,如果不是,例如一个字符串,所有东西都将放在一起,它们之间没有空格。