Я предполагаю, что l oop должен работать, пока пользователь не введет «3». Основная проблема, похоже, заключается в том, что вы хотите, чтобы использование было напечатано один раз в начале, а затем снова для каждого недопустимого ввода. Один из способов сделать это, не меняя слишком много кода, мог бы быть таким:
#include <stdio.h>
void print_usage(void){
printf("\nSelect operation. 1 to add, 2 to remove, 3 to exit.");
printf("\n> ");
}
int foo(){
print_usage();
unsigned int choice;
do {
scanf("%d",&choice);
if (choice==1){
// stuff
} else if (choice==2){
// stuff
} else if(choice!=3){
printf("\nError, try again..\n");
print_usage();
}
} while (choice!=3);
printf("\nEnd of run.\n");
}
Делая это так, scanf()
будет выполняться на каждой итерации (чтобы пользователь мог ввести ' 1 или 2 так часто, как им нравится), и проблема с дублированным кодом решается путем помещения этой части в небольшую отдельную функцию.
Обратите внимание, что этот код на самом деле не ведет себя одинаково Кстати как в любой из ваших версий. Это работает так, как я думаю, вы, вероятно, захотите, чтобы он работал.