我正在尝试创建一个简单的c ++程序,该程序可以打印出char是Y还是y,N或n还是都不是。
调试后,我发现即使char变量为'N',if(chr =='Y'||'y')语句也为true。谁能告诉我为什么这个if语句为真而不是假?
#include "pch.h"
#include <iostream>
using namespace std;
void main()
{
char chr = 'N';
if (chr == 'Y' || 'y')
{
cout << "chr is y" << endl;
}
else if (chr == 'N' || 'n')
{
cout << "chr is n" << endl;
}
else
{
cout << "chr is something else" << endl;
}
}
答案 0 :(得分:3)
这没做你的事:
if (chr == 'Y' || 'y')
这基本上是:
if (chr == 'Y' || true)
所以最后:
if (true)
您必须说一下您的比较:
if (chr == 'Y' || chr == 'y')
运算符==
仅使用一个字符,而不是一组可能的字符。
答案 1 :(得分:1)
代替这个
if (chr == 'Y' || 'y')
您需要
if ((chr == 'Y') || (chr == 'Y'))
与'N'
和'n'
类似。
也可以进行一次比较:
if (toupper((unsigned char)chr) == 'Y')
通过这种方式,可维护性得到了显着提高,因为如果字母发生变化,则仅需要更改一个值(对于不同的本地化,例如)。