C++程序始终进入第一个if语句问题排查求助
问题描述
我刚学习C++仅3天,编写的程序无论输入什么字母,都会执行第一个if语句的内容。我正在查找错误但无法发现问题,希望得到帮助。问题代码如下:
#include <iostream> #include <string> using namespace std; struct Pack { double Price; char Package; }; int main() { Pack Basic; Basic.Price = 29.99; Basic.Package = 'A'; Pack Essential; Essential.Price = 39.99; Essential.Package = 'B'; Pack Premium; Premium.Price = 49.99; Premium.Package = 'C'; Pack Advance; Advance.Price = 89.99; Advance.Package = 'D'; Pack Ultimate; Ultimate.Price = 199.99; Ultimate.Package = 'E'; Pack PremiumFam; PremiumFam.Price = 69.99; PremiumFam.Package = 'F'; Pack AdvanceFam; AdvanceFam.Price = 89.99; AdvanceFam.Package = 'G'; Pack UltimateFam; UltimateFam.Price = 249.99; UltimateFam.Package = 'H'; cout << "McAfee Package refund % Multiplier" "\n\n"; cout<< "This program will allow you to get the refund % of any packages" "\n" "Please see Packages below: " "\n\n"; cout<< "A- Basic $29.99" "\n" "B- Essential $39.99 " "\n\n"; cout<< "C- Premium: $49.99" "\n" "D- Advance (Individual) $89.99" "\n" "E- Ultimate (Individual) $199.99" "\n\n"; cout<< "F- Premium (Family) $69.99" "\n" "G- Advance (Family) $69.99" "\n" "H- Ultimate (Family) $249.99" "\n\n"; char Intro; cout<< "Please select the package by letter assigned: " "\n"; cin>> Intro; if (Intro = Basic.Package) { cout<< "The Package selected is: " << "Basic" << "\t" << "At a cost of: $" << Basic.Price; } else if (Intro = Essential.Package) { cout<< "The Package selected is: " << "Essential" << "\t" << "At a cost of: $" << Essential.Price; } else if (Intro = Premium.Package) { cout<< "The Package selected is: " << "Premium" << "\t" << "At a cost of: $" << Premium.Price; } else if (Intro = Advance.Package) { cout<< "The Package selected is: " << "Advance (Individual)" << "\t" << "At a cost of: $" << Advance.Price; } else if (Intro = Ultimate.Package) { cout<< "The Package selected is: " << "Ultimate (Individual)" << "\t" << "At a cost of: $" << Ultimate.Price; } else if (Intro = PremiumFam.Package) { cout<< "The Package selected is: " << "Premium (Family)" << "\t" << "At a cost of: $" << PremiumFam.Price; } else if (Intro = AdvanceFam.Package) { cout<< "The Package selected is: " << "Advance (Family)" << "\t" << "At a cost of: $" << AdvanceFam.Price; } else { cout<< "The Package selected is: " << "Ultimate (Family)" << "\t" << "At a cost of: $" << UltimateFam.Price; } return 0; }
错误分析与修复
核心错误是把判断相等的==运算符写成了赋值运算符=。
在C++中,=的作用是把右侧的值赋给左侧变量,同时整个赋值表达式的结果就是被赋予的值。Basic.Package的值是'A',它的ASCII值不为0,所以Intro = Basic.Package这个表达式会被判定为true,导致第一个if分支永远被执行,不管你输入什么。
修复方法很简单,把所有if条件里的=替换成==即可,修正后的关键代码片段如下:
if (Intro == Basic.Package) { cout<< "The Package selected is: " << "Basic" << "\t" << "At a cost of: $" << Basic.Price; } else if (Intro == Essential.Package) { cout<< "The Package selected is: " << "Essential" << "\t" << "At a cost of: $" << Essential.Price; } else if (Intro == Premium.Package) { cout<< "The Package selected is: " << "Premium" << "\t" << "At a cost of: $" << Premium.Price; } else if (Intro == Advance.Package) { cout<< "The Package selected is: " << "Advance (Individual)" << "\t" << "At a cost of: $" << Advance.Price; } else if (Intro == Ultimate.Package) { cout<< "The Package selected is: " << "Ultimate (Individual)" << "\t" << "At a cost of: $" << Ultimate.Price; } else if (Intro == PremiumFam.Package) { cout<< "The Package selected is: " << "Premium (Family)" << "\t" << "At a cost of: $" << PremiumFam.Price; } else if (Intro == AdvanceFam.Package) { cout<< "The Package selected is: " << "Advance (Family)" << "\t" << "At a cost of: $" << AdvanceFam.Price; } else { cout<< "The Package selected is: " << "Ultimate (Family)" << "\t" << "At a cost of: $" << UltimateFam.Price; }
内容的提问来源于stack exchange,提问作者Heropig1773
相关产品推荐
相关产品推荐

