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

为什么getchar无法接收输入?C语言加减运算程序问题

问题分析与解决方案

嘿,这个坑我踩过好多次!你遇到的问题根源在于输入缓冲区里残留的换行符。

为啥会跳过运算符输入?

当你用scanf("%d", &no1)输入第一个数字后,你按下的回车(也就是换行符\n)并没有被scanf读取,而是留在了输入缓冲区里。接下来执行sign = getchar()时,getchar()直接读取了这个残留的换行符,根本没等你输入+或-,所以程序就直接跳到了输入第二个数字的步骤。

两种简单的修复方法

方法1:用scanf读取运算符时加前置空格

把原来的sign = getchar()改成:

scanf(" %c", &sign);

这里的前置空格是关键——scanf遇到空格时会自动跳过所有空白字符(包括换行、空格、制表符),直到找到第一个非空白字符,也就是你要输入的运算符。这种方法能适配各种输入场景(比如输入数字后加空格再回车),是最稳妥的方案。

方法2:手动吃掉残留的换行符

在第一个scanf之后,加一行getchar()来读取缓冲区里的换行符:

printf("Enter first number:" );
scanf("%d", &no1);
getchar(); // 吃掉输入no1后留下的换行符

不过这种方法如果用户输入数字后加了多个空格再回车,可能还会有残留空白,所以方法1更推荐。

修改后的完整代码

#include<stdio.h>
int main() { // 建议main函数返回int类型,符合C语言标准
    char sign;
    int no1, no2;
    int result = 0;

    printf("Enter first number:" );
    scanf("%d", &no1);
    printf("no1 is %d\n", no1);

    printf("\nEnter sign: '+' or '-' ");
    scanf(" %c", &sign); // 这里加了前置空格处理空白字符

    printf("Enter second number: ");
    scanf("%d", &no2);
    printf("no2 is %d\n", no2);

    if(sign == '+') {
        result = no1 + no2;
    } else if(sign == '-') {
        result = no1 - no2;
    } else {
        printf("Enter a valid sign!\n");
    }
    printf("Result: %d\n", result);
    return 0; // 标准main函数需要返回值
}

顺便提一句,标准C规范里main函数应该返回int类型,并且最后加上return 0;,这样代码会更规范哦。

内容的提问来源于stack exchange,提问作者user175079

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:28:23