Я пишу программу, которая имитирует бросание костей, и я застрял с этим фрагментом кода:
short diceNumber(){
unsigned short dice;
do {
printf("\nInput the number of dice to roll: ");
if(!scanf("%hu", &dice)) {
scanf("%*[^\n]");
scanf("%*c");
puts("");
puts("WRONG INPUT!");
}
else if(dice <= 0) puts("YOU MUST USE A DICE AT LEAST!");
}while(!scanf("%hu", &dice)|| dice <= 0);
return dice;
}
Проблема в том, что "scanf" внутри оператора if принимает два ввода вместоодин, например:
Input the number of dice to roll: 2
Затем он снова хочет 2 (или другое число).Первый вход не сканируется.Но ранее, в другой функции, «то же самое» утверждение работает.Вот код:
void menu () {
unsigned short myAnswer;
puts("Choose the dice type");
puts("");
// A printf statement with all the options
puts("");
do {
// INPUT VALIDATION SECTION
printf("\nYour input: ");
if (!scanf("%hu", &myAnswer)) {
scanf("%*[^\n]");
scanf("%*c");
puts("");
}
// switch statement
} while (myAnswer < 1 || myAnswer > 17);
}
Я пробовал разные решения (например, fputs, fflush (stdin), fflush (stdout)), но никто не работал.Можете ли вы помочь мне?