为何malloc分配的数组首元素为换行符?求正确读取输入方案
问题原因
当你用scanf("%d", &y)读取整数3后,输入缓冲区会残留你按下的换行符。后续的scanf("%c")会直接读取这个换行符,导致array[0]存储的是换行,而非目标字符。
修改方案
提供两种简单有效的修改方式:
方式一:手动清除缓冲区换行
在读取整数后,用getchar()吃掉残留的换行符:
int main() { int y; scanf("%d", &y); getchar(); // 清除输入3后的换行符 char *array = (char*)malloc(y); for (int index_y = 0; index_y < y; index_y++) { scanf("%c", &array[index_y]); } printf("%c test", array[0]); free(array); // 释放动态分配的内存,避免泄漏 }
方式二:通过scanf格式自动忽略空白
在%d后添加空格,让scanf自动跳过后续的空白字符(包括换行):
int main() { int y; scanf("%d ", &y); // %d后加空格,自动忽略换行等空白 char *array = (char*)malloc(y); for (int index_y = 0; index_y < y; index_y++) { scanf("%c", &array[index_y]); } printf("%c test", array[0]); free(array); }
额外提示
输入时注意不要添加中文引号“”,否则这些引号会被当作普通字符读取。直接输入3后回车,再输入###即可。
内容的提问来源于stack exchange,提问作者hu xiuleiwe
相关产品推荐
相关产品推荐

