C语言字符数组含空格无法完整输出的问题求助
问题原因
scanf("%s", text) 默认会在遇到空格、换行或制表符时终止输入读取,所以输入中空格后的内容根本没有被写入text数组,导致程序只处理空格前的部分。
解决方案
使用fgets()函数替代scanf,它可以读取包含空格的整行输入,直到换行符或达到指定的最大字符数。需要注意的是fgets会把输入末尾的换行符也读入数组,因此需要手动将其替换为字符串结束符\0,避免输出多余的换行。
修改后的代码
#include <stdio.h> #include <string.h> // 用于strlen函数 int main() { char text[80]; // 读取最多79个字符(留一个位置给\0),包含空格 fgets(text, sizeof(text), stdin); // 去掉fgets读取的换行符(如果存在) size_t len = strlen(text); if (len > 0 && text[len - 1] == '\n') { text[len - 1] = '\0'; } int current = 0; printf("> "); while(text[current] != '\0') { switch(text[current]) { case 'a': case 'A': printf("$"); break; case 'e': case 'E': printf("#"); break; case 'i': case 'I': printf("@"); break; case 'o': case 'O': printf("*"); break; case 'u': case 'U': printf("="); break; default: printf("%c", text[current]); } ++current; } printf("\n"); // 输出结束后换行,让结果更整洁 return 0; }
额外优化说明
- 把大小写相同的元音合并到同一个case分支,减少冗余代码
- 添加
#include <string.h>用于计算字符串长度 - 最后添加换行输出,让结果格式更清晰
内容的提问来源于stack exchange,提问作者mattia
相关产品推荐
相关产品推荐

