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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 21:24:52