Неожиданный результат при попытке непрерывного запроса, пока они не дают только целочисленный ввод - PullRequest
0 голосов
/ 24 февраля 2020

Проблема: когда пользователь вводит 'q', подсказка (Number:) появится снова (что ожидается). Однако, когда пользователь вводит «qq», приглашение появится дважды ie (Number: Number:). И когда пользователь вводит «qqq», приглашение появится 3 раза ie (Number: Number: Number:). есть ли способ исправить этот код? Я новичок в программировании, поэтому я был бы очень признателен, если бы вы попытались объяснить проблему с точки зрения непрофессионала.

int main(void)
{

    char number[17];
    while (true)
    {
        printf("Number: ");
        scanf("%s", number);
        int i;
        char c;
        if (sscanf(number, "%i %c", &i, &c) == 1)
        {
            printf("%i\n", i);
            return 0;
        }
    }
}

Ответы [ 2 ]

2 голосов
/ 24 февраля 2020

Я отредактировал код в соответствии с тем, что вы сказали, ребята, и он работает. Может кто-нибудь объяснить мне, почему это работает?

int main(void)
{

    char number[17];
    while (true)
    {
        printf("Number: ");
        fgets(number, 17, stdin);
        int i;
        char c;
        if (sscanf(number, "%i %c", &i, &c) == 1)
        {
            printf("%i\n", i);
            return 0;
        }
    }
}
0 голосов
/ 24 февраля 2020

Другим решением является вызов fflush(stdin) для очистки входного буфера.

 if (sscanf(number, "%i %c", &i, &c) == 1)
    {
        printf("%i\n", i);
        return 0;
    }
 else fflush(stdin);
...