0

例如,假设我曾经scanf从键盘读取一个字符。之后我printf用来打印我刚刚读到的字符。

scanf("%c",&ch);
printf("%c",ch);

scanf读取字符时,我必须按 enter 继续并运行printf,对吗?

假设我ABCD用键盘输入。之后printf将打印A.

但是当我这样做时:

do {
   scanf("%c",&ch);
   printf("%c",ch);
} while (ch!='\n');

ABCD用键盘输入,我认为printf必须打印A. 而且因为它A不会\n继续循环,对吗?

但它会打印而不是这个ABCD。为什么会这样?

4

3 回答 3

7

当您输入 时"ABCD\n",每个都从输入缓冲区scanf("%c",&ch);读取一个char,直到到达换行符。

因此,在'A'打印完之后,缓冲区中仍然存在 a ,"BCD\n"因此 next在循环的下一次迭代中scanf立即成功读取 another 。char'B'

于 2012-11-13T16:42:01.600 回答
4

在 scanf 中,我必须按 enter 继续并运行 printf 对吗?

没有。只要有要读取的字符,就会读取它。

我在 printf 将打印 A 之后放入 scanf ABCD ...

如果您输入 ABCD 并回车,则输入现在将包含五个字符。A、B、C、D 和换行符。您的循环将依次读取字符 A、B、C、D,然后读取换行符。

于 2012-11-13T16:43:25.997 回答
1

scanf does not wait for you to press enter, it simple tries to read in what you typed if it matched your format string. If you had used %s, then it would wait until a whitespace character before matching.

This thread may also be useful: why does scanf not wait for user input after it fails one time?

于 2012-11-13T16:45:14.183 回答