C语言中使用getchar()从终端获取用户输入异常:代码未触发输入提示
问题修复与说明
你的代码无法触发输入提示、正常获取输入,主要是输出缓冲未及时刷新、类型错误和边界处理缺失导致的,以下是修复方案和问题解析:
修复后的代码
#include <stdio.h> int main() { printf("Enter search string or X to exit:\n"); fflush(stdout); // 强制刷新输出缓冲,确保提示立刻显示 char str[1024] = {0}; int h; // 用int存储getchar返回值,正确处理EOF int j = 0; // 读取输入,同时避免缓冲区溢出、处理输入结束 while ((h = getchar()) != '\n' && h != EOF && j < 1023) { str[j++] = (char)h; } str[j] = '\0'; // 添加字符串结束符 // 验证输入结果 printf("You entered: %s\n", str); return 0; }
关键问题解析
- 输出提示不显示:标准输出默认是行缓冲模式,虽然你的
printf带\n,但部分终端环境下可能仍会延迟输出,添加fflush(stdout)可以强制刷新缓冲区,让提示立刻出现。 char h类型错误:getchar()返回int类型(包含字符ASCII值或表示输入结束的EOF),用char存储会截断EOF,导致循环无法正确终止。- 缓冲区溢出风险:原代码没有限制
j的最大值,若输入超过1023个字符会越界写入,破坏内存。修复后添加j < 1023的判断,预留位置存字符串结束符\0。 - 冗余的结束符赋值:原循环内每次都赋值
\0,只需在输入完成后赋值一次即可。
内容的提问来源于stack exchange,提问作者O_T
相关产品推荐
相关产品推荐

