为何无法打印字符变量?C语言getchar/putchar代码异常求助
问题排查:C语言程序无法正常打印第二个字符变量
核心原因:getchar()会读取所有输入字符(包括换行符)
你的代码逻辑本身没有语法错误,但getchar()的行为可能和你预期的不一样:它会从标准输入读取每一个字符,包括你按下回车键产生的换行符(\n)。
当你运行程序后:
- 输入
a并按下回车,第一个getchar()读取到'a',putchar(b)打印出a。 - 第二个
getchar()会读取你按下回车产生的换行符(\n),然后putchar(y)打印出一个空行(换行)。 - 此时程序执行完毕,回到shell提示符。你后续输入的
b被shell当作命令执行,所以出现了dash: 2: b: not found的错误——这个错误来自shell,不是你的C程序。
如何验证和修复
- 如果你想让程序读取两个可见字符,输入时不要中途按回车,直接连续输入两个字符(比如
ab)再按回车。此时程序会依次读取'a'和'b',并打印出ab。 - 如果你希望跳过输入中的空白字符(换行、空格等),可以在读取前过滤:
#include <stdio.h> #include <ctype.h> // 用于isspace函数 int main() { int b, y; // 跳过空白字符直到读到有效字符 do { b = getchar(); } while (isspace(b)); putchar(b); do { y = getchar(); } while (isspace(y)); putchar(y); return 0; }
内容的提问来源于stack exchange,提问作者Adam z
相关产品推荐
相关产品推荐

