2017-07-20 9 views
-3

私はC++で簡単なマッドライブラリプログラムを作成しようとしています。ユーザーが入力した単語が母音で始まっているかどうか確認したいのですが、単語の前に "a"を、 "an"に。私は最初の文字を格納することができましたが、If文の他の文字と比較することはありません。私はこれを完全に間違っているのですか?文字を比較することができません(C++)

if (firstChar == 'a' || firstChar == 'e' || firstChar == 'i' || ...) 

firstChar == 'a'ブールに評価:これは次のよう

#include <string> 
#include <iostream> 
using namespace std; 

int main() { 
    string adj_3; 
    string anN; 
     char firstChar; 

//  GETTING USER'S WORD 

     cout << "ADJECTIVE: " << endl; 
     getline(cin, adj_3); 

//  GETTING FIRST CHARACTER 

     firstChar = adj_3[0]; 

//  SEEING IF IT'S A VOWEL (not working) 

     if(firstChar == ('a' || 'e' || 'i' || 'o' || 'u' || 'A' || 'E' || 'I' || 'O' || 'U')) { 
      anN = "n"; 
     } 
     else { 
      cout << "not working" << endl; 
     } 

    cout << "I am having a" << anN << " " << adj_3 << " time at camp." << endl; 

} 
+2

(https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)。 – Rakete1111

+4

あなたは[良いC++の本](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)を使うことができるようなサウンドです。その中に複数の比較を行う方法が表示されます。 – NathanOliver

+1

これはオペレータの操作方法ではありません。働く – Borgleader

答えて

3

||オペレータは、二つの引数に適用される必要があります。 firstChar == 'a' || firstChar == 'e'は、これらの2つの演算の結果である2つのブール値をとり、別のブール値を返します。次に、最初の引数として次の||演算に供給されます。このようにして、||操作のいずれかが真であるか、またはすべてが偽になるまで操作を「連鎖」することができます。

例と説明はhereを参照してください。

1

hnefatlの答えは片道です。

また、母音を確認するために、break文を使用しないスイッチケースを使用することもできます。ような何か:ここhttps://stackoverflow.com/a/1028463/6594779述べたように、そのswitch-caseの上に

switch(firstChar) 
{ 
case 'a': 
case 'e': 
case 'i': 
case 'o': 
case 'u': 
case 'A': 
case 'E': 
case 'I': 
case 'O': 
case 'U': cout<<"Vowel"; 
} 

if-else ladder比べて多くの利点を持っています。

1

論理演算子||は、2つのブール式を結合します。 a==0 || b==1を返し、2つのオペランドのいずれかがtrueの場合はtrueを返します。 'a'のような1文字をオペランドに渡すと、'a'の値は9797 != 0 => trueなので、これはtrueと解釈されます。したがって、式('a' || 'e' || 'i' || 'o' || 'u' || 'A' || 'E' || 'I' || 'O' || 'U')は常にtrueになり、firstchar == (....)firstchar == trueと同じになります。おそらくfalseとなります。

あなたはあなたがすべての母音を保存する請求項すぎ配列を使用して、それを比較することができます...

if (firstChar == 'a' || firstChar == 'e' || firstChar == 'i' || ...) 

か...

if (strchr(firstChar, "aeiouAEIOU") != NULL)) ... 
0

を書くことができます。以下に示すような何か:あなたは[良い本を]読みたいかもしれません

char vowels[10]={'a','e','i','o','u','A','E','I','O','U'}; 
    int flag=0; 
    for(int i=0;i<10;i++) 
    { 
     if(vowels[i]==firstChar) 
     { 
      flag=1; 
      anN="n"; 
     } 
    } 
    if(flag==1) 
     cout << "I am having a" << anN << " " << adj_3 << " time at camp." << endl; 
    else 
     cout << "not working" << endl; 
関連する問題