C++错误:ISO C++禁止指针和整数之间的比较[-fpermissive]

3

我是一名刚入门的C++程序员,对C++了解非常少。我在IDE和编译器Dev-C++ 5.6.3上创建了一个程序,但遇到了错误:ISO C++ 禁止在指针和整数之间进行比较[-fpermissive]。我不知道这意味着什么。


1
жҲ‘еҸ‘зҺ°gotoе”ҜдёҖеҘҪзҡ„з”ЁйҖ”жҳҜеңЁжҹҗдәӣзҘһз§ҳжғ…еҶөдёӢиҝӣиЎҢй”ҷиҜҜжҒўеӨҚпјҢжҜ”еҰӮеңЁжІЎжңүејӮеёёеӨ„зҗҶзҡ„е№іеҸ°дёҠгҖӮ - Mike DeSimone
@MikeDeSimone,确实,我所见过的C语言唯一好的用途就是用于错误处理。但我并不排除它在其他地方有真正好的用途。 - chris
1
话虽如此,LobbyShut2Error 引用的代码没有发布,因此无法知道在这里发生了什么。另一个大问题是混合使用 <iostream> (cout) 和 <stdio.h> (scanf, getch) 代码。这可能会产生各种奇怪的副作用,因为这两个 I/O 库并不总是保持同步。 - Mike DeSimone
3
这个程序看起来像是直接从gwbasic翻译而来。C++有比到处使用goto更好的控制程序流程的方法。 - user3553031
2
还有一个小问题,scanf 中的 %c 期望的是 char * 而不是 int * - T.C.
显示剩余10条评论
2个回答

7
""Y""y""n""N"是C风格的字符串,它们是以空字符结尾的字符数组。当尝试比较它们时,它们会退化为指向const char的指针。另一方面,inputy声明为int。这就是你在比较指针和整数时出错的原因。

为了解决这个问题,应该将inputy与字符而不是字符串进行比较:'Y''y''n''N'(注意使用单引号而不是双引号)。

"

2
还需要进行更改,要么将“inputy”更改为“char”,要么不使用“scanf(”%c“”)。 - M.M

2

您还有另一个问题。您声明了int inputy;,但是您正在尝试通过scanf("%c",&inputy);读取字符。格式字符串%c&inputy的数据类型不匹配。如果您想读取字符,应该使用正确的输入变量类型:

char inputy;

scanf("%c", &inputy);

1
啊是的,这带来了困惑,因为在 C 中,许多“字符”函数使用 int 来传递或返回字符。 - Mike DeSimone
说起来,如果在小端平台上运行,并且inputy使用的内存通过某种方式初始化为0,那么即使指针指向错误的类型(因为指针指向的字节是int的最低位字节),也会观察到正确的行为。从语言的角度来看,这绝对是“未定义的行为”。 - Mike DeSimone

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接