scanf()在do-while循环中的异常表现:输入字符后无输出问题咨询
输入字符后程序无输出的原因
先看你给出的代码:
char ch; do { scanf("%c" , &ch); } while (ch != '\n'); printf("%c", ch);
问题出在循环逻辑和最后输出的字符上:
do-while循环会逐个读取输入流里的字符,直到读到换行符'\n'才终止。当你输入abc并回车,输入流里的内容是'a'、'b'、'c'、'\n'。循环会依次把前三个字符读入ch,最后一次读取的是'\n',此时循环条件不满足,循环结束。- 最后
printf输出的是ch里存储的'\n',也就是换行符。这个字符在终端里只会让光标下移一行,不会显示任何可见的字符,所以你会觉得程序“无输出”。
如果想验证这个结论,可以修改输出语句,把字符和它的ASCII码一起打印出来:
printf("最后读取的字符:%c,ASCII码:%d\n", ch, (int)ch);
运行后你会看到ASCII码是10,对应的就是换行符。
内容的提问来源于stack exchange,提问作者user13780178
相关产品推荐
相关产品推荐

