C语言字符数组问题:如何避免输出多余字符,仅显示前5个?
问题根源分析
数组长度不足+缺少字符串结束符
C语言里字符串必须以\0(空字符)作为结束标记,你定义的char array[5]只能存5个字符,没有多余空间放\0。printf("%s")会从数组起始位置一直读到\0才停止,数组里没这个标记的话,就会越界读取后续内存里的随机内容,这就是多余字符出现的原因。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
相关产品推荐
相关产品推荐

