【问题标题】:C++ Error: ISO C++ Forbids Comparison Between Pointer and Integer [-fpermissive]C++ 错误:ISO C++ 禁止指针和整数之间的比较 [-fpermissive]
【发布时间】:2014-09-12 18:14:41
【问题描述】:

我是一名初学者 C++ 程序员,对 C++ 知之甚少。我一直在 IDE 和编译器上创建程序:Dev-C++ 5.6.3。我遇到了这个错误:ISO C++ 禁止指针和整数之间的比较 [-fpermissive]。不知道是什么意思。

【问题讨论】:

  • @drescherjm, goto 在某些情况下可能是个好主意,但我敢打赌对于初学者来说绝不是一个好主意。
  • 我发现goto 的唯一好用处是在某些神秘情况下的错误恢复。就像在没有异常处理的平台上一样。
  • 也就是说,LobbyShut2Error 引用的代码没有贴出来,所以没有办法知道这里发生了什么。另一个大问题是<iostream> (cout) 和<stdio.h> (scanf, getch) 代码的混合。这可能会产生各种奇怪的副作用,因为这两个 I/O 库并不总是彼此保持同步。
  • 这个程序看起来像是从 gwbasic 直接翻译过来的。与到处使用goto 相比,C++ 控制程序流的方式要好得多。
  • 还有一个小问题,%c for scanf 期望 char *,而不是 int *

标签: c++ shutdown dev-c++


【解决方案1】:

"Y""y""n""N" 是 C 风格的字符串,它们是以 null 结尾的字符数组。当试图比较它们时,它们退化为指向const char 的指针。另一方面,inputy 被声明为int。这是您比较指针和整数错误的根源。

要解决此问题,请将 inputy 与字符而非字符串进行比较:'Y''y''n''N'(注意单引号,而不是双引号)。

【讨论】:

  • 还需要进行更改,inputy 成为char,或者scanf("%c" 不被使用
【解决方案2】:

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

char inputy;

scanf("%c", &inputy);

【讨论】:

  • 啊,是的,C 中这么多“字符”函数使用int 来传递或返回字符而引起的混乱。
  • 想一想,如果在little-endian平台上运行,并且如果inputy使用的内存通过某种方式初始化为0,那么即使在以下情况下也会观察到正确的行为指针指向错误的类型(因为指针指向的字节是int 的最低位字节)。就语言而言,绝对是“未定义的行为”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多