布尔值始终评估为真

Boolean always evaluating as true

本文关键字:评估 布尔值      更新时间:2023-10-16

我正在制作一个简单的程序,但有一个问题,布尔值总是评估为真,我不知道发生了什么,我错过了什么还是什么? 请帮忙

#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
int main ()
{
char kar;
cout<<"Masukan Karakter = ";
cin>>kar;
bool vokal = (kar == ('A','I','U','E','O','a','i','u','e','o'));
string keterangan = vokal ? "Huruf Vokal" : "Bukan Vokal";
cout<<keterangan;
return(0);
}

这个:

('A','I','U','E','O','a','i','u','e','o')

不代表一个集合或你认为它的作用。 这些','(逗号(之间的所有内容都被视为表达式。代码的这一部分从左到右计算每个表达式,并返回最右边的计算。

在您的情况下:表达式'A'的计算结果为'A''I'计算结果为'I'、...,'e'计算结果为'e''o'计算结果为'o'。计算每个表达式后,将返回值'o'。这就是为什么您的kar将始终与'o'进行比较,并且此代码的行为与您的代码相同:

bool vokal = (kar == 'o');

您实际需要做的是分别比较kar与这些字符中的每一个(在您的情况下使用 OR ('||'( 运算符(:

bool vokal = (kar == 'A' || kar == 'I' || kar == 'U' || kar == 'E' || kar == 'O' 
|| kar == 'a' || kar == 'i' || kar == 'u' || kar == 'e' || kar =='o');