C语言中scanf读取字符后无法打印用户输入的问题
问题原因及解决方案
核心原因
第一个scanf("%d", &userinput);读取完整数后,你按下的回车键(换行符\n)会留在输入缓冲区里。当执行第二个scanf("%c", &convertfrom);时,%c会直接读取缓冲区里的这个换行符,而不是你后来输入的P。这就导致convertfrom存储的是换行符,打印时只会显示空白,看起来像是没输出字符。
另外你的第二个scanf格式串里还多了个换行,这会让它等待更多输入,进一步加重问题。
解决办法
给你几种可行的修复方式:
- 在第二个
scanf的格式串开头加个空格,空格会自动跳过缓冲区里的空白字符(包括换行、空格、制表符):
scanf(" %c", &convertfrom);
- 在第一个
scanf之后,用getchar()手动吃掉缓冲区里的换行符:
scanf("%d", &userinput); getchar(); // 吃掉残留的换行符
- 直接修正第二个
scanf的格式串,去掉多余的换行并处理空白:
把原来的scanf("%c\n", &convertfrom);改成scanf(" %c", &convertfrom);
验证效果
修改后,当你输入1回车,再输入P回车,程序就能正确输出letter = P了。
内容的提问来源于stack exchange,提问作者eshtabel3asal
相关产品推荐
相关产品推荐

