C++代码中变量isuit从char改为int后输出结果不同的原因
问题核心成因
cin的输入运算符>>是重载函数,会根据接收变量的类型执行完全不同的读取逻辑,你遇到的差异和int、char的底层存储特性无关,是输入读取行为不同导致的:
- 当
isuit为char类型时:cin >> isuit会读取输入流中下一个非空白的单个字符,你输入里的S/H/C/D会被正常读取为对应的ASCII值存入变量,后续switch分支可以正常匹配,cards数组会被正确赋值,最终输出确实缺失的5张牌。 - 当
isuit为int类型时:cin >> isuit会尝试从输入流中读取十进制格式的整数,输入里第一个待读取的内容是字母S,不属于合法的整数字符,cin会直接进入失败状态,后续所有的cin读取操作都会直接跳过,整个循环中cards数组始终保持初始化的全0值,所以最后会输出所有52张牌,和你看到的异常输出一致。
补充说明
char确实属于C++的整数类型,你如果手动把'S'的ASCII值赋值给int类型的isuit,switch分支是可以正常匹配的,二者在这一点上行为一致。差异完全来自cin对不同类型的读取逻辑不同,和类型本身的存储特性无关。
内容的提问来源于stack exchange,提问作者kkkk
相关产品推荐
相关产品推荐

