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
相关产品推荐
相关产品推荐

