C++报错:ISO C++禁止指针与整数比较问题求助
错误原因与修复方案
错误原因分析
你遇到的ISO C++ forbids comparison between pointer and integer错误,根源有两点:
- 类型不匹配:
disp是char类型(单个字符),而"s"是C风格字符串字面量,在C中它本质是const char*(指向字符数组的指针)。将单个字符与指针做比较,违反了C的类型规则,因此编译器报错。 - 逻辑表达式无效:
||"S"的写法完全不符合语法要求,逻辑或运算符||的两侧必须是布尔值(或可隐式转为布尔值的表达式)。"S"作为非空指针会被编译器视为true,这会导致无论disp输入什么,整个条件永远为真,逻辑完全失效。
修复代码行
把出错的if语句改成以下两种写法之一即可:
写法1:直接匹配大小写字符
if (disp == 's' || disp == 'S') { cout << "Disponible"; } else { cout << "No Disponible"; }
这里用**单引号'**包裹单个字符,确保比较的双方都是char类型,符合语法规则,同时逻辑或的两侧都是有效的布尔判断表达式。
写法2:统一大小写后比较(更简洁)
借助<cctype>头文件的toupper函数,将输入字符转为大写后再做单次比较,减少重复代码:
#include <cctype> // 需要添加这个头文件 // ... 其他代码保持不变 ... if (toupper(disp) == 'S') { cout << "Disponible"; } else { cout << "No Disponible"; }
额外小提示
你的代码存在一个潜在输入问题:使用cin >> size;、cin >> num;等整数输入后,输入缓冲区会残留换行符。当前代码后续没有使用getline所以暂时无影响,但如果后续添加getline操作,可能会导致输入被跳过。解决方法是在每个cin >>之后添加cin.ignore()清除缓冲区的换行。
内容的提问来源于stack exchange,提问作者Zurrán
相关产品推荐
相关产品推荐

