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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 22:45:05