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
相关产品推荐
相关产品推荐

