C++入门计算器结果始终为0问题咨询:含代码排查需求
问题排查与解决
老哥,你的计算器程序结果始终为0的核心原因很明确,咱们先拆解问题:
核心错误:Switch分支完全没被触发!
你定义的processing是int类型,输入的是整数1/2/3/4,但switch的case里写的是'1'、'2'这类字符常量。字符'1'的ASCII码是49,和整数1完全不是同一个值,所以程序永远不会进入任何计算分支,result就一直保持你设置的初始值0,这就是结果不对的根源!
把case里的单引号去掉,改成整数常量就好了:
switch (processing) { case 1: // 去掉单引号 result = nmb1 + nmb2; break; // 其他case同理改成2、3、4 }
还有个编译级错误:变量声明不匹配
你原代码里声明了两次int nmb;,但后面输入时用的是nmb1和nmb2——这两个变量根本没被声明!正常编译器会直接报错说nmb1、nmb2未定义,你得把变量声明改成:
int nmb1; int nmb2;
关于整数变量初始化的问题
不是“必须”初始化所有整数变量,但局部变量(比如main函数里的这些变量)如果不初始化,它的值是未定义的随机垃圾值,使用这种变量会导致不可预测的行为(比如程序崩溃、输出奇怪的值),所以强烈建议手动初始化局部变量。
而全局变量、静态局部变量会被编译器默认初始化为0,不需要手动赋值。
修正后的完整代码
#include <iostream> using namespace std; int main() { int result = 0; int processing; int nmb1; int nmb2; char wait; cout << "Operation:" << endl; cout << "1 for +" << endl; cout << "2 for -" << endl; cout << "3 for *" << endl; cout << "4 for /" << endl; cin >> processing; cout << "Type both numbers:" << endl; cout << "1.nmb:" << endl; cin >> nmb1; cout << "2.nmb:" << endl; cin >> nmb2; switch (processing) { case 1: result = nmb1 + nmb2; break; case 2: result = nmb1 - nmb2; break; case 3: result = nmb1 * nmb2; break; case 4: if (nmb2 == 0) { cout << "Don't do that!"; break; } else { result = nmb1 / nmb2; break; } default: cout << "Invalid operation! Please enter 1-4." << endl; break; } cout << "result = " << result << endl; cin >> wait; return 0; }
(注:别忘了加<iostream>头文件,原代码里没写,不然cout、cin无法正常使用;另外加了default分支处理无效输入,程序更健壮)
内容的提问来源于stack exchange,提问作者BMW3000
相关产品推荐
相关产品推荐

