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

C语言如何将用户输入的单词逐字符存入字符数组?

C语言读取用户输入单词到字符数组的实现方案

C语言中手动初始化char word[] = "hello"的本质是:每个字符按顺序存入数组对应索引位置,末尾自动补充字符串终止符'\0',按照以下方法实现即可达到完全一致的效果:


方法1:使用scanf搭配%s格式符(最简方案,适用于读取不含空格的单词)

这是最常用的实现方式,只要规避常见的书写错误即可正常运行:

#include <stdio.h>
// 自定义允许的最大单词长度,按需调整即可
#define MAX_WORD_LENGTH 100

int main() {
    // 数组长度要比最大单词长度多1,预留位置存储终止符'\0'
    char word[MAX_WORD_LENGTH + 1];
    // %后加数字限制读取的最大字符数,避免缓冲区溢出
    scanf("%100s", word);

    // 此时数组存储效果和手动初始化完全一致,可直接循环遍历检查字符
    // 验证示例:打印每个索引对应的字符
    for (int i = 0; word[i] != '\0'; i++) {
        printf("索引%d:%c\n", i, word[i]);
    }
    return 0;
}

该方法常见错误说明:

  • 不要错误声明为char *word[]/char word[][]这类二维数组或指针数组,否则会把输入字符串的地址存在第一个数组元素中,出现「整个单词存在第一个元素」的问题
  • 不要给scanf的数组参数加取地址符&,一维数组名本身就是首地址,加&会导致类型不匹配报错
  • 不要声明过小的数组,输入内容超过数组长度会触发越界访问错误

方法2:循环逐字符读取(适用于需要自定义读取规则的场景)

如果需要过滤特殊字符、手动控制读取终止条件,可以用getchar()逐字符读取:

#include <stdio.h>
#include <ctype.h>
#define MAX_WORD_LENGTH 100

int main() {
    char word[MAX_WORD_LENGTH + 1];
    int index = 0;
    char temp_char;

    // 可选:跳过输入开头的空白字符(空格、换行、制表符等)
    while ((temp_char = getchar()) != EOF && isspace(temp_char));

    // 逐字符存入数组,直到遇到空白、结束符或超出最大长度
    while (temp_char != EOF && !isspace(temp_char) && index < MAX_WORD_LENGTH) {
        word[index++] = temp_char;
        temp_char = getchar();
    }
    // *必须手动补充字符串终止符'\0',否则数组不是合法C字符串,遍历会读到垃圾值*
    word[index] = '\0';

    return 0;
}

该方法常见错误说明:

  • 漏写末尾补'\0'的步骤,是大部分逐字符读取方案报错、输出乱码的核心原因
  • 没有处理输入缓冲区残留的换行符,会导致第一次读取%c时直接拿到残留的换行符,没有读取到实际输入的内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 15:06:02