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

C语言使用数组打印字符时输入与输出不匹配问题求解

问题根因

输入输出不匹配是C语言标准输入缓冲区的残留特性导致的:

  • 执行scanf("%d", &n)读取整数时,你输入完数字按下的回车对应的换行符\n不会被%d格式符读取,会残留在标准输入缓冲区中。
  • 后续循环中使用scanf("%c", &s[i])读取字符时,%c格式符不会自动跳过空格、换行、制表符这类空白字符,第一次循环会直接把缓冲区里残留的\n读入s[0]。
  • 你后续输入的ABCDE五个字符,实际只有前4个A/B/C/D被读入s[1]到s[4],凑够5次读取后循环就终止了,最后一个E还留在缓冲区里没被读取。
  • 打印时第一个输出的是不可见的换行符,接着输出ABCD,就会出现你看到的“输入5个字符只打印4个”的现象。
修复方案

选任意一种即可解决问题:

  • 方案1:在读取字符的%c前加一个空格,让scanf主动跳过所有前置空白字符,修改后的读取代码如下:
for (i = 0; i < n; i++) {
    scanf(" %c", &s[i]); // %c前的空格不能漏
}
  • 方案2:读取完整数n之后,主动消耗掉缓冲区残留的换行符,在提示输入字符的代码前加一行getchar();即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 04:18:16