例如,我使用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,而不是这个。为什么会这样?

最佳答案

当您输入"ABCD\n"时,每个scanf("%c",&ch);从输入缓冲区读取一个char,直到到达换行符。
因此,在打印'A'之后,缓冲区中仍有一个"BCD\n",以便下一个scanf立即成功读取循环的下一次迭代中的另一个char'B'

关于c - C语言中奇怪的scanf问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13364803/

10-17 01:26