使用getchar()的C语言读行程序无输出,是否因函数使用不当?
问题分析与解决
你的程序无输出有两个核心问题:
- 运算符优先级错误:
while ((c = getchar() != EOF) && i < max_len)中,!=优先级高于=,实际是把getchar() != EOF的布尔值(1或0)赋值给c,而非读取的字符本身。 - 未处理换行符终止循环:当前循环只有遇到EOF或达到最大长度才会停止,输入普通文本后不会退出循环,程序一直卡在读取状态,无法执行后续的
printf。
修正后的代码
#include <stdio.h> // 读取一行内容的函数 void read_line(char *line, int max_len) { int i = 0; char c; // 修正运算符优先级,增加换行符判断终止循环,预留结束符位置 while ((c = getchar()) != EOF && c != '\n' && i < max_len - 1) { line[i] = c; i++; } line[i] = '\0'; } int main() { char line[100]; read_line(line, 100); printf("%s\n", line); }
关键修改说明
- 给
c = getchar()添加括号,确保先执行字符读取,再判断是否为EOF。 - 加入
c != '\n'条件,输入回车后立即终止读取循环,程序可继续执行输出。 - 将
i < max_len改为i < max_len - 1,为字符串结束符'\0'预留位置,避免数组越界。
内容的提问来源于stack exchange,提问作者hu234
相关产品推荐
相关产品推荐

