gpt4 book ai didi

c++ - C++ 禁止指针和整数的比较

转载 作者:行者123 更新时间:2023-12-03 06:00:22 25 4
gpt4 key购买 nike

嘿,我仍在学习 C++,在编译这部分代码时遇到了障碍。在我进一步讨论我正在为项目开发的文本游戏之前,我想知道为什么在尝试编译时会出现此错误,以便我可以在开发时进行调试。

ISO C++ forbids comparison between pointer and integer [-fpermissive] if (answer1 == 'Yes' && answer1 == 'yes) {

我不太确定哪里出了问题,因为代码将结果存储为"is"。 (我通过添加 std::cout>>answer1; 收集用户 y/n 答案后进行检查。)

但是当我尝试使用 If 语句检查时,我收到此错误。

    #include <iostream>

int main() {

char name[50];
char answer1[50];

std::cout << "Ahh... Welcome newcomer. What is your name?\n";
std::cin >> name;
std::cout << "You said your name was " << name << " correct?\n";
std::cin >> answer1;

// Let the game begin!

if (answer1 == 'Yes' && answer1 == 'yes') {

std::cout << "Lets get this game started then!\n";

}
else {

std::cout << "Then why are you even wasting my time?\n";
}

}

我知道这是基本的和初级的,但我仍在学习(也是自学的)。感谢您的阅读。

最佳答案

变量answer1被声明为字符数组

char answer1[50];

在这个if语句的条件下

if (answer1 == 'Yes' && answer1 == 'yes') {

数组指示符隐式转换为指向其第一个元素(字符)的指针,该元素的类型为 char * .

另一方面,例如这个文字 'Yes'是一个多字节字 rune 字,其类型为 int .

因此,您尝试将数组第一个字符的地址与具有实现定义值的整数进行比较。显然这是没有道理的。

您需要的是使用标准C函数strcmp在 header <cstring> 中声明。使用字符串文字代替字 rune 字。

您还必须使用逻辑或运算符 ||而不是逻辑 AND 运算符 &&在条件内。

例如

#include <cstring>

//…

if ( strcmp( answer1, "Yes" ) == 0 || strcmp( answer1, "yes" ) == 0 ) {

如果您使用标准类 std::string 而不是字符数组,程序会更安全。 .

关于c++ - C++ 禁止指针和整数的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59888984/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com