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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 06:52:10