[英]Xcode system clear and “expression result unused” error using C++
尝试用Xcode编写Tic Tac Toe游戏来练习C ++时,我遇到了各种各样的问题,这些问题我大多已经解决了,但是我仍然很难理解为什么会出现以下错误以及如何正确修复他们/避免他们。
问题一:
我已经链接了curses库,但是仍然出现此错误:不建议从字符串文字转换为'char *' 。
#include <unistd.h>
#include <term.h>
void ClearScreen()
{
if (!cur_term)
{
int result;
setupterm( NULL, STDOUT_FILENO, &result );
if (result <= 0) return;
}
putp( tigetstr( "clear" ) );
}
问题2:我一直收到未使用的实体问题 ( 表达式结果未使用 )。
(gridBox是char类型的2维数组,player也是char类型,都是全局变量。)
if (gridBox[0,0] == gridBox[1,0] && gridBox[1,0] == gridBox[2,0]) {
if (player == 'X') {
return 'X';
}
if (player == 'O') {
return 'O';
}
}
问题3:当我尝试将上一个问题中的if语句更改为...
if (gridBox[0,0] == 'X' && gridBox[1,0] == 'X' && gridBox[2,0] == 'X') {
return 'X';
}
我得到这个错误: 指针和整数('char *'和'int')之间的比较 。
这让我完全发疯,请帮忙。
谢谢大家!
就是这样:从字符串文字(例如"clear"
隐式转换为指向非const char char*
的指针,出于历史原因,过去曾经允许这样做,但由于不安全而被弃用。
与C库或旧代码交互时,这可能会导致一些问题,但通常很容易解决。
将其替换为非const数组:
char clear[] = "clear"; putp(tigetstr(clear));
是由错误的索引方式引起的; 一个二维数组是一个数组数组,它的索引如下:
gridBox[0][0]
逗号操作符是在某些情况下使用,如果您希望按顺序来评价两个表达式,并丢掉第一的结果- a, b
返回的值b
,所以gridBox[0,0]
相当于gridBox[0]
在实践中,这种情况非常罕见-很少有编译器开始发出警告,因为这几乎从来都不是您想要的。
由于gridBox
是char
数组的数组,并且由于第2点), gridBox[0,0]
等效于gridBox[0]
, gridBox[0]
是char数组。
您不能使用==
比较数组。 而是将它们隐式转换为指向数组第一个元素的指针,然后将其用于比较。 因此,左手边是char*
,而右手边被提升为int
以便进行比较,而这两个对象无法进行比较。
如果您解决了索引编制问题,此问题将同时消失。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.