Базовый цикл while для сканирования целого числа - PullRequest
0 голосов
/ 06 мая 2018

Я пытаюсь создать программу на C, чтобы позволить пользователю вводить целое число больше 0, но если вводится любой другой тип, заставьте пользователя повторить попытку, пока он не введет целое число.

int minBet;

printf("Enter integer"\n);

while(scanf("%d",&minBet)!=1)
{
    printf("Must be an integer value greater than 0\n");
    scanf(" %d",&minBet);
}

Когда вводится нецелое значение, операторы printf зацикливаются бесконечно. Как я могу решить это?

может использовать только stdio.h и НЕТ глобальных переменных

Ответы [ 2 ]

0 голосов
/ 06 мая 2018

Когда вы печатаете, скажем, e , вы набираете e и затем нажимаете клавишу ВВОД. Теперь в буфере ввода есть 2 символа. scanf("%d") читает e , но символ новой строки все еще находится во входном буфере.

Более простым решением вашей непосредственной проблемы является добавление getchar() после каждого scanf("%d"). Этот код будет работать.

#include <stdio.h>
#include <string.h>

int main(void)
{
    int minBet;

printf("Enter integer \n");

while(scanf("%d",&minBet)!=1)
{
    getchar(); 
    printf("Must be an integer value greater than 0\n");
}
}

Кроме того, ваш код printf("Enter integer"\n); неверен. Должен быть

printf("Enter integer \n");
0 голосов
/ 06 мая 2018

Если входной символ не соответствует обложке, он остается во входном потоке, чтобы запутать следующее чтение - вам придется избавиться от него с помощью getchar или fgetc.

while ( scanf( “%d”, &minBet ) < 1 )
{
  getchar();
  printf( “You entered a non-numeric value, try again: );
}
...