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

C++入住验证代码中switch语句未等待输入直接触发默认分支的问题求助

C++入住验证代码中switch语句未等待输入直接触发默认分支的问题求助

Hey Emma, let's break down what's going wrong with your code step by step—there are a few small issues adding up to that weird behavior you're seeing!

1. 布尔类型误用导致输入流异常

你把houseID和ID都定义成了bool类型,但bool只能存储true(非0)或false(0),根本存不住151这种整数。当你用cin >> ID输入151时,cin无法把这个值解析成有效的布尔值,会直接触发输入失败状态,后续所有的cin操作(比如读取checkC)都会被跳过。这就导致checkC是一个未初始化的垃圾值,switch自然会直接跳到default分支,连输入机会都不给你。

解决办法:把houseID和ID改成int类型,这样就能正常存储和读取151这种数值了。

2. 赋值操作代替了比较操作

你的if (ID = houseID)是赋值语句,不是比较!这里会把houseID的值赋给ID,然后判断这个值是否为真——因为houseID是151(非0,转成bool是true),所以不管你输入什么,这个条件都会成立。应该改成if (ID == houseID)用双等号做比较。

3. Switch分支的字符常量错误

你写的case '144794221':是多字符字符常量,这属于C++里的未定义行为,而且checkC是int类型,你要匹配的是数字144794221,所以应该去掉单引号,写成case 144794221:。另外,你定义的bool code = 144794221;完全没用,可以删掉——因为code是bool类型,144794221会被转成true,根本存不住原数值。

修正后的代码示例

#include <iostream>

void idcheck();

int main(){

    int houseID = 151;  // 改成int类型
    int ID;             // 改成int类型

    int house1 = 1;
    int house2 = 2;
    int house3 = 3;

    std::cout << "*****Welcome to miniclean property managers*****\n";
    std::cout << "Please enter your airBnB's address: ";
    std::cin >> ID;

    if (ID == houseID)  // 双等号做比较
    {
        idcheck();
    }

    return 0;
}

void idcheck(){
    int checkC;  // 删掉没用的bool code变量

    std::cout << "Please enter code: ";
    std::cin >> checkC;

    switch (checkC)
    {
    case 144794221:  // 去掉单引号,用数字常量
        std::cout << "Thankyou, your house code is 8868. Enjoy your stay!";
        break;
    
    default:
        std::cout << "Incorrect code, please try again";
        break;
    }
} 

另外,建议你以后调试的时候可以加一些输出,比如在cin >> ID之后输出ID的值,看看是不是读取正确了,这样能更快定位问题~

备注:内容来源于stack exchange,提问作者Emma Robb-collins

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 12:43:12