C++ 如果(aCHAR==';字符';&|';另一个字符';)出现问题

C++ 如果(aCHAR==';字符';&|';另一个字符';)出现问题,c++,char,boolean,C++,Char,Boolean,您好,所以我尝试检查字符串中的某个字符,以确保它不是\、=、|等,如果不是,则用“player”字符替换空格,但函数每次都返回true,即使char newLoc等于“”(空): screen.get\u contents返回一个装满strin的向量容器,并且 sprite.get_location返回一个整数数组,其中有两个数字,[0]表示X,[1]表示Y bool check_collision(Sprite& sprite,int X, int Y, Screen& scr

您好,所以我尝试检查字符串中的某个字符,以确保它不是\、=、|等,如果不是,则用“player”字符替换空格,但函数每次都返回true,即使char newLoc等于“”(空):

screen.get\u contents返回一个装满strin的向量容器,并且
sprite.get_location返回一个整数数组,其中有两个数字,[0]表示X,[1]表示Y

bool check_collision(Sprite& sprite,int X, int Y, Screen& screen) 
    {
    ////////////////////// check whats already there /////
        char newLoc = screen.get_contents(sprite.get_location()[0]+Y,sprite.get_location()[1]+X);
        if (newLoc == '|' || '/' || '_' || '=' || 'X' || 'x' )
            return true;
        else
            return false;
    };
有什么问题谢谢您需要:

if (newLoc == '|' || newLoc == '/' || ...)
您所写的内容相当于:

if (newLoc == ('|' || '/' || ...))
if (newLoc == 1)
这相当于:

if (newLoc == ('|' || '/' || ...))
if (newLoc == 1)
请注意,更简洁的书写方式可能是:

switch (newLoc)
{
case '|':
case '/':
...
    return true;

default:
    return false;
}
不起作用,你必须这样做:

newloc == '|' || newloc == '/' || etc...
但是,这更容易阅读:

switch (newloc):
    case '|':
    case '/':
    case '_':
    case '=':
    case 'X':
    case 'x':
        return true;
    default:
        return false;

谢谢但是为什么IDE会出现1???@Griffin:
|
是逻辑OR运算符。如果它的任一参数为
TRUE
,则它“返回”
TRUE
。字符文字的计算结果为
TRUE
,除非它是空字符
'\0'
。因此表达式的RHS等于
TRUE
。当解释为整数值时,这反过来计算为
1