例如,我使用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/