у вас есть несколько проблем в вашем коде
Первая пара
printf("Are you married?\n");
scanf(" %c", &mstatus);
ничего не сделано, потому что вы не используете ответ на чтение, удалите эти строки
В
for (; flag == 1;) {
вы немедленно выходите из l oop, поскольку вы инициализировали flag в 0, и это не согласуется с тем, как Вы изменяете значение flag , сравниваете его с 0 вместо 1
In
default:
printf("please re-enter a valid answer");
scanf(" %c", &mstatus);
scanf должен быть удален, потому что вы не используете чтение ответа
Из этого, потому что вы хотите сделать l oop хотя бы один раз, чтобы запросить ответ и управлять им, его очень удобнее читать a do ... while
Также добавьте последний символ новой строки при печати чего-либо
Пример:
#include <stdio.h>
int main(void) {
int flag = 0;
do {
char mstatus;
printf("Are you married?\n");
scanf(" %c", &mstatus);
switch (mstatus) {
case 'y':
case 'Y':
printf("You have answer yes for married\n");
flag = 1;
break;
case 'n':
case 'N':
printf("You have answer no for married\n");
flag = 1;
break;
default:
printf("please re-enter a valid answer\n");
}
} while (flag == 0);
return 0;
}
Компиляция и выполнение:
pi@raspberrypi:/tmp $ gcc -Wall d.c
pi@raspberrypi:/tmp $ ./a.out
Are you married?
a
please re-enter a valid answer
Are you married?
y
You have answer yes for married
pi@raspberrypi:/tmp $ ./a.out
Are you married?
d
please re-enter a valid answer
Are you married?
N
You have answer no for married
pi@raspberrypi:/tmp $
Конечно, в вашем случае после l oop ничего нет, поэтому вы также можете упростить удаление flag и его управление. t и замените два первых break на return 0 , конечно, в этом случае l oop может быть для (;;) или while (1) et c
Возможно , пожалуйста, введите правильный ответ - лучший выбор, чем , пожалуйста, введите правильный ответ , потому что определение, что пользователь никогда не вводит правильный ответ, поэтому он не может повторно ввести один