你的想法很美好,但是你忽略了一个事实,
while循环一定会执行一条语句,而且直到遇到第一个语句块(一般为遇到一个分号,但是if-else除外,因为if-else对计算机而言是一个整体,也就是一个语句块),也就是说当你输入 字符c 回车符的时候,缓冲区里存放的是 c 回车符 ,但是此时计算机会逐个检查你的输入,因此组后显示的就是一个字符c,关于中间的两次转换和第一个问题的回答是一样的;
还有什么不懂的可以继续交流~~~
因为按回车键实际上是输入了两个字符,前一个字符被scanf认为是确认输入,另一个字符则仍然留在了输入缓冲区内,会被下一个读取字符或字符串的函数读到。如果不额外写个getchar把这个字符读掉的话,你正常的读取字符或字符串的语句就无法正确执行。
因为是用scanf来接受输入的时候,你需要最后按回车来确认输入,而这个回车也会跟你输入的字符串一起被送到缓冲区,你用getchar就可以将这个scanf所输入的那个回车键给清除掉,就不会导致输入错误。
希望对你有帮助。