初心者としてC ++を学ぼうとしているだけの非常に単純なプログラムを作成しています。短い文の母音の数と子音の数を簡単に数えられるように設計されています。私はそれをしているときに、興味深い小さなジレンマに出くわしました。
まず、コードは次のとおりです。
#include <iostream>
#include <time.h>
#include <string>
using namespace std;
int main()
{ int vowells = 0, consenants = 0;
char sentence[100];
char alphabet[] = {'a','e','i','o','u','b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','y','z'};
cout << "Please type in a sentence (up to 100 characters max, lower case only): ";
cin >> sentence;
cin.ignore();
cout << "Your sentence was: " << sentence;
for (int i=0; i < sizeof(sentence); i++)
{
if (sentence[i] == alphabet[0]||sentence[i] == alphabet[1]||sentence[i] == alphabet[2]||sentence[i] == alphabet[3]||sentence[i] == alphabet[4])
{vowells++;}
else if (sentence[i] == alphabet[5]||sentence[i] == alphabet[6]||sentence[i] == alphabet[7]||sentence[i] == alphabet[8]||sentence[i] == alphabet[9]||sentence[i] == alphabet[10]||sentence[i] == alphabet[11]||
sentence[i] == alphabet[12]||sentence[i] == alphabet[13]||sentence[i] == alphabet[14]||sentence[i] == alphabet[15]||sentence[i] == alphabet[16]||sentence[i] == alphabet[17]||sentence[i] == alphabet[18]||
sentence[19] == alphabet[20]||sentence[i] == alphabet[21]||sentence[i] == alphabet[22]||sentence[23] == alphabet[24]||sentence[i] == alphabet[25])
{consenants++;}
}
cout << "\nThe number of vowells is: " << vowells;
cout << "\nThe number of consenants is: " << consenants;
cin.get();
}
すみません、本当に雑に見えます。基本的に cin >> 文の後; 行 cin.ignore() 関数を入れて、文を入力した後に押されたエンターキーを取り除きます。関数の最後にある cin.get() は、プログラムが終了する前に別の入力が必要になるように、単にブレークポイントとして機能すると想定されています。スペースを入れずに 1 語だけ入力すると、プログラムが実行され、必要に応じて最後に一時停止します。スペースを含む複数の単語を入力すると、表示する時間さえ与えずに、実行してすぐに閉じます。これは何らかの理由でスペースが原因だと思います...なぜこのように影響するのかはわかりませんが。
つまり、基本的に、私の問題を引き起こしているのはスペースですか? もしそうなら、どうすればそれらを取り除くか、少なくともプログラムにそれらを無視させることができますか?
ありがとう!
編集***だから、WindowsのSleep()コマンドを使用して一時停止できると言われ、それが機能しました。ここでの問題は、別の人がコメントしたように、関数 cin は最初の単語のみを受け入れ、残りの文は考慮しないことです。したがって、スペースを取り除くか、別の入力関数を使用して正しく機能させる必要があると思います。これを行う方法について何か提案はありますか?