为何程序中空格未被识别?K&R C习题代码问题求助
问题分析与解释
你的代码出现两个核心问题,直接导致输出不符合预期:
1. 循环与if语句的范围错误(最关键原因)
C语言中,while或if语句如果没有用大括号{}包裹代码块,只会执行紧跟其后的第一行代码。你的代码结构实际等价于:
int main(){ int c; while((c = getchar()) != EOF) { if (c != ' ') putchar(c); } // 以下代码在循环结束后才会执行,此时c是EOF,永远不会触发有效操作 if (c == ' ') printf('test'); putchar(c); }
也就是说,判断空格的if语句和后续的putchar(c)根本不在循环体内,只会在输入结束(遇到EOF)时执行一次。而此时c的值是EOF,既不满足c == ' '的条件,也无法输出有效字符——这就是输入的空格完全被忽略、只输出非空格字符ABCD的原因。
2. printf的参数错误
printf的第一个参数要求是字符串常量,必须用双引号"test"包裹,但你用了单引号'test'。单引号仅用于表示单个字符常量,多字符常量(如'test')属于C语言的未定义行为,编译时会报错或产生不可预期的结果,直接导致你的printf语句无法正常输出test。
修正后的示例代码
如果要实现你预期的输出(每个空格前输出test并保留空格),代码应调整为:
int main(){ int c; while((c = getchar()) != EOF) { if (c != ' ') { putchar(c); } else { printf("test"); putchar(c); } } return 0; }
输入A B C D时,这段代码会输出Atest Btest Ctest Dtest。如果要完成K&R习题的原始要求(将连续空格替换为单个空格),则需要额外记录前一个字符是否为空格,避免连续输出空格。
内容的提问来源于stack exchange,提问作者Vinamra Bali
相关产品推荐
相关产品推荐

