2017-06-27 13 views
2

このセクションでは、2つのオプションを持つメニューを表示し、入力を読み取り、対応する関数に移動することになっています。ユーザーが1と2以外の何かを入力すると、プログラムはユーザーに警告し、メニューを表示してユーザーに再度入力を要求します。このプロセスは、ユーザーが正しい入力を行うまで繰り返されます。ユーザーが有効な入力を入力するまでユーザー入力のループを作成する方法

ユーザーが1と2以外のものを入力したときにのみループを繰り返す方法を見つけようとしています(これにより、ユーザーは今度は適切な応答を入力できます)。

しかし、このようなwhileループを使用すると、入力が何であってもループします。

ご迷惑をおかけして申し訳ありません。

char input; 
displayWellDoneMenu(); 
scanf("%c", &input); 

while (input != '1' || input != '2') 
{ 
    printf("You must select 1 or 2!\n"); 
    displayWellDoneMenu(); 
    scanf("%c", &input); 
    rewind(stdin); 
    system("cls"); 
} 

switch (input) 
{ 
    case'1': 
     additionIntermediate(); 
     break; 
    case '2': 
     main(); 
     break; 
} 
+6

それは* =入力 '*ので関係なく入力が何であるかをループしない '1' || input!= '2''は、 'input'が何であっても常に真です。あなたは 'input!= '1' && input!= '2''としたいです。 – lurker

+0

@lurker今、問題が見えます、ありがとう!! –

+0

また、 'input'が最初にテストするときに初期化されないという点でも問題があります。だから私はそれをいくつか初期値に設定することをお勧めします1または2、またはより良い、その問題を回避する他の人によって与えられた答えのいずれかを使用します。 – lurker

答えて

0
char input; 
do 
{ 
    displayWellDoneMenu(); 
    scanf("%c", &input); 
    system("cls"); 
    if (c=='1' || c=='2') 
     break; 
    printf("You must select 1 or 2!\n"); 
}while(1); 

switch (input) 
{ 
    case'1': 
     additionIntermediate(); 
     break; 
    case '2': 
     main(); 
     break; 
} 
+0

明らかに、これは本当の答えです。あなたがコードブロックが実行されることを保証したいのであれば、メモを追加したい。一度だけ使用する... while(0)、私はこの方法をいくつかの暗号プロジェクトで見る。いくつかのプログラムでは、実行の制御がそのブロックの上に変わる可能性があり、while(0)メソッドを使用すると、実行は1回だけ行われます。 – EsmaeelE

0

これはアイデアのようになります!

while(1){ 
    scanf("%c", &input); 
    if(input == '1' || input == '0') break; 
    // else continue cycle 
} 
関連する問題