このコードはdo-while
ループのための非常に良い候補である、とあなたは変数answer
を初期化するために必要としていないことを使用している場合。
int answer; //= 0; no need to initialize!
do {
cout<<"Do you want to encrypt(enter 1) or decrypt(enter 2)?"<<endl;
cin >> answer;
}while(answer != 1 && answer != 2);
そしてもちろん、あなたが他の人がすでに指摘したように&&
を使用する必要があります。 :-)
ところで、ユーザーがhgjkhg
などの非整数入力を入力した場合はどうなりますか? cin>>answer
は入力を読み込むことができず、それは永遠にそこに残り、cin
のフラグは失敗に設定され、cin
はそれ以上の入力を読み取ることができません。つまり、ループは決して終了しません。
これを回避するために、そして、コードをより堅牢にし、あなたのようにそれを書くべきで完了させる:
int answer = 0;
while(answer != 1 && answer != 2) {
cout<<"Do you want to encrypt(enter 1) or decrypt(enter 2)?"<<endl;
if (!(cin >> answer))
{
cin.clear(); //clear the failure flag if there is an error when reading!
std::string garbage;
std::getline(cin, garbage); //read the garbage from the stream and throw it away
}
}
はい。 do-while
の代わりにwhile
ループを使用できます。あなたのコードにif(!(cin>>answer)) { ... }
を追加するだけです。 :-)
答えとして受け入れるかどうかわからないので、人々は私の質問に早く答えてくれました。しかし、あなたはもっと多くのものを指摘しました。これは非常に感謝しています。 – Jaanus
@ジャヌス:もちろん、あなたは私のものを受け入れるべきです:P ..このコードはあなたが書いたものよりも頑強で完全です。 :-) – Nawaz
オハイオ州と私はあなたが言ったことをしました、しかし、入力のために 'test'のような単語を入力すると、それは恐ろしいところで' DO'の実行を開始し、何かを入力する新しい機会を与えません。あなたは暗号化しますか(1を入力してください)........ '無限に:/ PS!私は何かを入力させずに、毎回 'if'サイクルに入ります! – Jaanus