c++ - 布尔值始终评估为真
问题描述
我正在制作一个简单的程序,但有一个问题,布尔值总是评估为真,我不知道发生了什么,我错过了什么还是什么?请帮忙
#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');
推荐阅读
- java - java中哪些场景可以使用setStackTrace()方法?
- kotlin - 此代码中的花括号是否称为匿名函数
- java - Native Express 广告是否已弃用?
- reactjs - 如何使用 refs 访问/覆盖元素的 className?
- regex - 用于修复 YAML 字符串的正则表达式
- php - Laravel - 批量分配 || 如果找到相同的唯一键,我该如何更新数据,如果数据是新的,我该如何创建
- python - 仅在程序退出关键部分后,如何在 Python 中处理 SIGTERM?
- ruby-on-rails - Rails 两侧多对多多态
- php - 如何在 PHP 7+ 中捕获可恢复的错误?
- python - 如何使用已从 github 安装的 pip 导出 conda 环境?