У меня есть маленькая программа, которая сбивает меня с толку.Я пытаюсь использовать цикл для получения ввода от пользователя.Если ввод неправильный, он повторяется снова, но если он правильный, он завершается.Фрагмент кода: </p>
<pre><code>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 раза.Интересно отметить, что если я ввожу что-то длиной 2 символа, оно повторяется еще 2 раза, а если я оставляю это поле пустым (просто нажимаю клавишу возврата), оно не повторяется.
Я должениспользовать только C. Я использую Visual C ++ 2010 для компиляции.
Спасибо.