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

C语言计算器加法功能异常:输入整数却提示Invalid求助

C语言计算器加法运算提示"Invalid"的问题修复

你的核心问题出在加法分支的错误判断逻辑上,另外输入有效性的检查方向也错了,下面一步步说问题和修复方案:

问题分析

  • 加法分支的判断完全错误:
    你写的if(!(num1 == '+' && num2 == '+'))完全不符合逻辑——num1和num2是int类型的整数变量,而'+'是ASCII码为43的字符常量。正常输入整数的情况下,num1和num2不可能等于'+',所以这个条件永远成立,必然会输出"Invalid",根本走不到求和结果的输出分支。
  • 输入有效性检查方向错误:
    你想实现"输入字符时提示Invalid",但应该检查的是scanf读取整数是否成功,而不是拿整数和字符常量比较。scanf("%d %d", &num1, &num2)的返回值是成功读取的变量个数,如果用户输入了非整数,返回值会小于2,这时候才应该提示无效。

修正后的代码

#include <stdio.h>
#include <conio.h>  

int main(){
    char op;
    int num1, num2;
    int result;

    printf("Enter (+, -, /, *): ");
    scanf("%c", &op);

    printf("Enter Two Integers: \n");
    // 检查是否成功读取两个整数
    if (scanf("%d %d", &num1, &num2) != 2) {
        printf("Invalid");
        getch();
        return 0;
    }

    switch (op){
        case '+':
            result = num1 + num2;
            printf("Sum: %d ", result);
            break;

        case '-':
            result = num1 - num2;
            printf("Difference: %d ", result);
            break;

        case '/':
            // 补充除数为0的判断
            if (num2 == 0) {
                printf("Invalid: Division by zero");
            } else {
                result = num1 / num2;
                printf("Quotient: %d ", result);
            }
            break;

        case '*':
            result = num1 * num2;
            printf("Product: %d ", result);
            break;

        default:
            printf("Invalid operator");
            break;
    }

    getch();
    return 0;
}

关键修改说明

  • 移除加法分支的错误判断:删掉了那行完全不符合逻辑的if判断,加法运算可以正常执行并输出结果。
  • 增加整数输入有效性检查:通过scanf的返回值判断是否成功读取两个整数,输入非整数时直接输出"Invalid"并终止程序。
  • 补充除数为0的判断:除法运算时如果除数是0,会导致运行错误,这里增加判断提示无效。
  • 默认分支补充提示:输入非法运算符时,输出"Invalid operator",而不是什么都不输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 08:15:32