私は私を混乱させる小さなプログラムを持っています。ループを使用してユーザーからの入力を取得しようとしています。入力が間違っている場合は再度繰り返されますが、正しい場合は終了します。コードスニペットは次のとおりです。
void main()
{
char user_status; // Checks User Status q = Quiz Master and p = Participant
int valid_status = '0'; // Checks If User Status Is Valid Or Not. Used In Some Loops. 0 = Invalid, 1 = Invalid.
printf("Welcome to General Knowledge Quiz Management System.\nThis application has been designed to help you conduct a quiz or test your GK.");
do
{
user_status = '0';
printf("\n\nPlease enter your role.\nQuiz Master = \'q\'\nParticipant = \'p\'\n");
scanf("%c", &user_status);
if (user_status == 'q'|| user_status == 'Q')
{
printf("Initializing Quiz Master Segment\n\n________________________________\n");
initiate_qm();
valid_status = '1';
}
else if (user_status == 'p' || user_status == 'P')
{
printf("Initializing Participant Segment");
initiate_pa();
valid_status = '1';
}
}
while (valid_status != '1')
printf("\nProgram Will Exit Now. Press Any Key To Return To Windows.");
getch();
}
私はこの出力を期待しています:
Please Enter Your Role
Quiz Master = 'q'
Participant = 'p'
今まで、それはうまくいきます。q / Q / p / Pを入力すると、うまく機能します。しかし、何か間違ったものを入力すると、必要な出力が得られません。
たとえば、「abc」と入力すると、qまたはpを入力するように求める上記のテキストが再度表示されます。しかし、代わりに、私はこれを取得します:
Please Enter Your Role
Quiz Master = 'q'
Participant = 'p'
Please Enter Your Role
Quiz Master = 'q'
Participant = 'p'
Please Enter Your Role
Quiz Master = 'q'
Participant = 'p'
Please Enter Your Role
Quiz Master = 'q'
Participant = 'p'
_ (I have to input here)
さて、なぜそれは余分に3回繰り返されるのですか。注意すべき興味深い点の1つは、2文字の長さの文字を入力すると、2回余分に繰り返され、空白のままにすると(returnキーを押すだけ)、余分な回数は繰り返されないことです。
Cのみを使用する必要があります。コンパイルにはVisualC++2010を使用しています。
ありがとう。