【发布时间】:2019-02-23 18:28:44
【问题描述】:
如果scanf语句在格式字符串中有空格,如下所示,
scanf(" %c",&abc);
然后它会跳过无限数量的空格,直到碰到一个字符。
所以 \n p 作为输入会将 p 存储在 abc 中。
使用这个概念,我无法预测我输入的以下程序的输出。
char echo ;
do {
scanf ("%c ", &echo);
printf ("%c\n",echo);
} while (echo != '\n') ;
请注意,scanf 语句中有一个尾随空格。
执行代码后,我得到以下行为。
它要求一个字符。 我输入 C
它要求一个字符。 我输入我
它打印 C。
它要求一个字符。 我输入 R
它打印出我。
它要求一个字符。 我输入 C
它打印 R。
这将永远持续下去。如果我按换行符,它就会跳过它。
为什么它在开头要求两个字符?它不应该执行 printf 语句吗?
为什么前一个输入的字符会打印在下一个?
【问题讨论】:
-
我看不到您发布的代码如何与您对行为的描述相对应。我没有看到要求字符的代码。
-
“它要求一个字符”怎么样??在
scanf()之前尝试printf("\n==> "); fflush(stdout);。 -
尝试我的建议,而不是简单的闪烁光标作为输入提示。
-
某种...
scanf("%c ", &ch);读取一个字符并跳过 0 个或多个空格。你输入“3ENTER”,你仍然被困在scanf()中,忽略空格。您再输入几个 ENTER(制表符、空格),但您仍然被困在scanf()中。当您最终键入“7ENTER”时,scanf()不再忽略空格(将“7ENTER”留在输入缓冲区中)并且程序继续。