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

使用getchar()的C语言读行程序无输出,是否因函数使用不当?

问题分析与解决

你的程序无输出有两个核心问题:

  1. 运算符优先级错误:while ((c = getchar() != EOF) && i < max_len)中,!=优先级高于=,实际是把getchar() != EOF的布尔值(1或0)赋值给c,而非读取的字符本身。
  2. 未处理换行符终止循环:当前循环只有遇到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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 19:15:45