C++ switch语句传入整数值无输出、char类型运行正常问题咨询
问题原因
你遇到的问题本质是整数字面量和字符字面量的数值不匹配:
- 当你把
num1定义为int类型时,用cin >> num1输入数字0/1,变量里存的是整数0(数值为0)、整数1(数值为1) - 但你switch的case分支写的是
'0'和'1',这两个是char类型的字符字面量,对应的ASCII值分别是48和49,和整数0、1的数值完全不相等 - 因为没有匹配的case分支,switch语句直接跳过执行,没有任何输出,程序正常退出返回0,就出现了你看到的现象
- 当你把
num1改成char类型时,cin >> num1输入的0/1会被识别为字符,存储的就是ASCII值48/49,刚好和case里的'0'、'1'匹配,所以能正常输出。
修复方案
有两种改法可选:
方案1:把case分支的字符字面量改成整数字面量
修改switch内的case判断,和int类型的num1匹配:
switch (num1) { case 0: // 去掉单引号,使用整数0 cout<< "you entered 0" << endl << endl; break; case 1: // 去掉单引号,使用整数1 cout<< "you entered 1" << endl << endl; break; }
方案2:保持case写法不变,把num1的类型改为char
就是你已经验证可行的改法,适合需要按字符处理输入的场景。
额外优化建议
如果需要覆盖没有匹配到case的场景,建议补充default分支避免逻辑遗漏:
switch (num1) { case 0: cout<< "you entered 0" << endl << endl; break; case 1: cout<< "you entered 1" << endl << endl; break; default: cout<< "invalid input" << endl << endl; }
内容的提问来源于stack exchange,提问作者Anubhav Patel
相关产品推荐
相关产品推荐

