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

C语言二维数组存储输入单词后打印出现随机字符求助

解决你的C语言数组输入乱码问题

嘿,作为刚接触C语言数组和函数的新手,遇到这种乱码问题太正常啦!我帮你分析下问题出在哪,再给你修正后的代码~

问题根源

你打印时出现随机字符,核心原因有两个:

  • 字符串缺少终止符:C语言里的字符串必须以'\0'(空字符)结尾,否则printf这类函数会一直读取内存直到碰到'\0',就会输出随机乱码。
  • 循环边界和输入处理不严谨:你的循环有些小问题,可能导致数组越界或者没有正确截断输入。

具体问题拆解

  1. 外层循环条件错误:如果要输入n个单词,x应该从0到n-1,而不是x <= n——后者会让你多处理一个不存在的单词(访问words[n],属于数组越界)。
  2. 未添加字符串终止符:当你遇到'\n'跳出内层循环时,没有给当前的words[x]加上'\0',导致字符串不完整。
  3. 输入长度未限制:内层循环y < 16,但如果用户输入16个字符,会把数组填满,没有位置放'\0',所以最多只能读15个字符。

修正后的代码

#include "mp1_lib.h"

void get_words(int n, char words[][16]) {
    char c;
    // 输入n个单词,x从0到n-1
    for(int x = 0; x < n; x++) {
        int y = 0;
        // 最多读15个字符,留一个位置给'\0'
        while(y < 15) {
            c = getchar();
            // 遇到换行符,结束当前单词输入
            if(c == '\n') {
                break;
            }
            words[x][y] = c;
            y++;
        }
        // 给当前单词加上字符串终止符,这是关键!
        words[x][y] = '\0';
        
        // 处理可能的剩余输入(比如用户输入超过15个字符的情况)
        while((c = getchar()) != '\n' && c != EOF);
    }
}

代码解释

  • 添加'\0'终止符:每次输入完一个单词后,手动在末尾加上'\0',确保printf能正确识别字符串结束位置。
  • 调整循环边界:外层循环x < n,保证只处理n个单词;内层循环限制最多读15个字符,避免数组溢出。
  • 清理剩余输入:如果用户输入的单词长度超过15个字符,后面的字符会被丢弃,直到遇到换行符,避免影响下一个单词的输入。

这样修改后,你再打印words数组里的单词,就不会出现随机字符啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:04:08