You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言中scanf读取字符后无法打印用户输入的问题

问题原因及解决方案

核心原因

第一个scanf("%d", &userinput);读取完整数后,你按下的回车键(换行符\n)会留在输入缓冲区里。当执行第二个scanf("%c", &convertfrom);时,%c会直接读取缓冲区里的这个换行符,而不是你后来输入的P。这就导致convertfrom存储的是换行符,打印时只会显示空白,看起来像是没输出字符。

另外你的第二个scanf格式串里还多了个换行,这会让它等待更多输入,进一步加重问题。

解决办法

给你几种可行的修复方式:

  1. 在第二个scanf的格式串开头加个空格,空格会自动跳过缓冲区里的空白字符(包括换行、空格、制表符):
scanf(" %c", &convertfrom);
  1. 在第一个scanf之后,用getchar()手动吃掉缓冲区里的换行符:
scanf("%d", &userinput);
getchar(); // 吃掉残留的换行符
  1. 直接修正第二个scanf的格式串,去掉多余的换行并处理空白:
    把原来的scanf("%c\n", &convertfrom);改成scanf(" %c", &convertfrom);

验证效果

修改后,当你输入1回车,再输入P回车,程序就能正确输出letter = P了。

内容的提问来源于stack exchange,提问作者eshtabel3asal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 05:21:16