質問: passcopy; break; } else puts("パスワードは数値のみです。"); continue; } return 0; } ``` このプログラムでpassに文字を入力すると文字数+1回ループします。 ![実行結果](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/810a2ba98b57ac30f57b6c6e6a4c86a8.jpeg) これはどうすればelse分岐のループを1回に出来ますか? また、whileのループで変数を2個使わなくてもこれでできる、みたいなのがあれば教えてください
回答: こんにちは。 入力する時、`a`→`s`→`Enter`と入力されたと思います。 この`Enter`もgetchar()にて返却されます。`'\n'`が返ってきます。 > > これはどうすればelse分岐のループを1回に出来ますか? > > > 「else分岐のループ」の意味がよく分かりませんが、`'\n'`が返ってきたらループを抜ければ良いかもしれません。 次に、while()ループの記述を間違っていると思います。あなたの記述の場合、while()の中でpasscopyをpassへコピーしています。従って、passcopyの値が0でない時ループを回り続けます。 もし,passとpasscopyが等しい時ループを回したいのであれば、`while (pass == passcopy)`と記述すればよいです。 > > また、whileのループで変数を2個使わなくてもこれでできる、みたいなのがあれば教えてください > > > `while(1)`でループを回し、ループ終了条件が成立したらbreak;すればよいです。 例えば、`'\n'`が返ってきたらループを抜ける場合は、`if (pass == '\n') break;`で良いです。 ところで、パスワードと言いつつ数字1桁しか設定できませんが、それは問題ないのでしょうか? 数値1桁のパスワードはたった10回の試行で破られてしまいます。 後、ループの最後のcontinueは意味がないです。continue文によりスキップされる文がないですので。