I need to write a program where I enter 2 letters and it should display "Yes" if both letters are vowels or consonants. If they are different types it should display "NO". At the end it should display the 2 entered vowels and consonants separately.
I've tried this code but it doesn't work for NO. Can you help me fix it?
#include <iostream>
using namespace std;
int main()
{
char a = 'a';
char b = 'b';
cout << "enter first charcter: " << endl;
cin >> a;
cout << "enter second character: " << endl;
cin >> b;
if ((a == 'a' || a == 'e' || a == 'i' || a == 'o' || a == 'u') && (b == 'a' || b == 'e' || b == 'i' || b == 'o' || b == 'u'))
{
cout << "YES" << endl;
}
else if ((a != 'a' || a != 'e' || a != 'i' || a != 'o' || a != 'u') && (b != 'a' || b != 'e' || b != 'i' || b != 'o' || b != 'u'))
{
cout << "YES" << endl;
}
else if ((a == 'a' || a == 'e' || a == 'i' || a == 'o' || a == 'u') && (b != 'a' || b != 'e' || b != 'i' || b != 'o' || b != 'u'))
{
cout << "NO" << endl;
}
else if ((a != 'a' || a != 'e' || a != 'i' || a != 'o' || a != 'u') && (b == 'a' || b == 'e' || b == 'i' || b == 'o' || b == 'u'))
{
cout << "NO" << endl;
}
return 0;
}
CodePudding user response:
There is one issue in your second YES case and likely every consonant check. You are using logical OR, when it should be logical AND. Your character a
can't be 'a'
AND it cannot be 'e'
AND etc. If a = 'e'
, it's still not the other vowels, and your big logical OR case returns true when it shouldn't.
You also repeat yourself too much. It's annoying to write, and if there is an error, like you have, it needs to be fixed in many places. Use DRY (Don't Repeat Yourself) and create a function that tells you if you have a vowel or not.
Then, you only need to explicitly check for just the YES cases or just the NO cases. Here's an example:
#include <iostream>
#include <string>
bool is_vowel(char c) {
std::string vowels = "aeiou";
return vowels.find(c) != std::string::npos;
}
int main() {
char first;
char second;
std::cout << "Letter: ";
std::cin >> first;
std::cout << "Letter: ";
std::cin >> second;
bool firstIsVowel = is_vowel(first);
bool secondIsVowel = is_vowel(second);
if ((firstIsVowel && secondIsVowel) || (!firstIsVowel && !secondIsVowel)) {
std::cout << "YES\n";
} else {
std::cout << "NO\n";
}
}
Output:
~/tmp
❯ ./a.out
Letter: a
Letter: i
YES
~/tmp
❯ ./a.out
Letter: b
Letter: c
YES
~/tmp
❯ ./a.out
Letter: a
Letter: h
NO
~/tmp took 4s
❯ ./a.out
Letter: h
Letter: a
NO
CodePudding user response:
I have managed to make it work. Thank you guys!
#include <iostream>
using namespace std;
int main()
{
char a = 'a';
char b = 'b';
bool vowel1, vowel2;
cout << "enter first letter: " << endl;
cin >> a;
cout << "enter second letter: " << endl;
cin >> b;
vowel1 = (a == 'a' || a == 'e' || a == 'i' || a == 'o' || a == 'u');
vowel2 = (b == 'a' || b == 'e' || b == 'i' || b == 'o' || b == 'u');
if ((vowel1 && vowel2) || (!vowel1 && !vowel2))
{
cout << "YES" << endl;
}
else
{
cout << "NO" << endl;
}
if (vowel1)
{
cout << "vowel: " << a << endl;
}
else
{
cout << "consonant: " << a << endl;
}
if (vowel2)
{
cout << "vowel: " << b << endl;
}
else
{
cout << "consonant: " << b << endl;
}
return 0;
}