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

C语言字符数组问题:如何避免输出多余字符,仅显示前5个?

问题根源分析
  1. 数组长度不足+缺少字符串结束符
    C语言里字符串必须以\0(空字符)作为结束标记,你定义的char array[5]只能存5个字符,没有多余空间放\0。printf("%s")会从数组起始位置一直读到\0才停止,数组里没这个标记的话,就会越界读取后续内存里的随机内容,这就是多余字符出现的原因。

  2. scanf格式串使用错误
    你写的%c\r是无效逻辑:scanf格式串里的\r会被当作空白字符(和空格、\n等价)匹配,但没法正确跳过输入后的回车。而且%c会读取任何字符,包括回车产生的\n(Windows下是\r\n),导致数组里可能存了换行符,进一步打乱内容。

修复方案

方案一:修正数组长度并手动加结束符

  • 把数组长度改成6,预留\0的位置:char array[6];
  • 输入完5个字符后手动添加结束符:array[5] = '\0';
  • 修正scanf格式串,在%c前加空格,跳过输入缓冲区里的空白字符(回车、空格等):scanf(" %c", &array[i]);

修正后的代码:

/* Variables */
int num;
char array[6]; // 预留1个位置存'\0'
char new;

/* Accepting user input */
printf("Please enter 5 characters below:\n");
scanf(" %c", &array[0]);
scanf(" %c", &array[1]);
scanf(" %c", &array[2]);
scanf(" %c", &array[3]);
scanf(" %c", &array[4]);
array[5] = '\0'; // 添加字符串结束符
/* Displaying input as string */
printf("%s", array); 

方案二:用循环简化输入

重复写scanf太冗余,用循环更简洁:

#include <stdio.h>

int main() {
    char array[6];
    int i;

    printf("Please enter 5 characters below:\n");
    for (i = 0; i < 5; i++) {
        scanf(" %c", &array[i]);
    }
    array[5] = '\0';
    printf("%s\n", array);
    return 0;
}

额外说明

  • scanf(" %c", ...)里的空格是核心:它会自动跳过所有空白字符,确保每次读的都是你输入的目标字符。
  • 如果想一次性读5个连续字符,也可以用scanf("%5s", array),这种方式会自动在末尾加\0,但要注意输入不能有空格(%s会在空格处停止读取)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 23:40:38