首页 > 解决方案 > 布尔值始终评估为真

问题描述

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

#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);
}

标签: c++

解决方案


这个:

('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');

推荐阅读