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

C++报错:ISO C++禁止指针与整数比较问题求助

错误原因与修复方案

错误原因分析

你遇到的ISO C++ forbids comparison between pointer and integer错误,根源有两点:

  1. 类型不匹配:disp是char类型(单个字符),而"s"是C风格字符串字面量,在C中它本质是const char*(指向字符数组的指针)。将单个字符与指针做比较,违反了C的类型规则,因此编译器报错。
  2. 逻辑表达式无效:||"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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 10:22:42