Я хочу написать программу которая при вводе 1 - 4 выполняет некоторые действия, при вводе числа 5 завершает работу, а при любом другом вводе выводит приглашение и запрашивает новый ввод. Описанная ниже программа работает, но не так. При вводе значения не типа int она просто прекращает работу
#include <stdio.h>
int main(void) {
int num = 0;
printf("Enter num:");
while (scanf("%d", &num) == 1) {
switch (num) {
case 1 : ; break;
case 2 : ; break;
case 3 : ; break;
case 4 : ; break;
case 5 : goto quit;
default : goto step;
}
; // некоторые операторы
step: printf("Enter num:");
}
quit: return 0;
}
Я пытался исправить это вот так:
#include <stdio.h>
int main(void) {
int num = 0;
new: printf("Enter num:");
while (scanf("%d", &num) == 1) {
switch (num) {
case 1 : ; break;
case 2 : ; break;
case 3 : ; break;
case 4 : ; break;
case 5 : goto quit;
default : goto step;
}
; // некоторые операторы
step: printf("Enter num:");
}
goto new;
quit: return 0;
}
Но так ещё хуже, происходит зацикливание. Функция scanf вновь и вновь пытается прочитать одно и то же значение не являющееся значением типа int. Как заставить её отбросить ошибочный ввод и читать следующий?
scanfвернет0и цикл сразу завершится. Неудивительно, что программа прекратит работу. Зачем вам вообще в вашей программе понадобился циклwhile (scanf("%d", &num) == 1)? Какую роль он играет? Все ваши манипуляции сgoto- это фактически попытки "победить" этот цикл. – AnT stands with Russia Oct 24 '19 at 16:27\n(очищаете ввод), а затем снова выходите на scanf – avp Oct 24 '19 at 21:04