Почему код печатает столько, сколько получает символы - PullRequest
0 голосов
/ 29 декабря 2018

Это код

#include <stdio.h>

int main()
{
    int num1 = 0, num2 = 0, num3 = 0, num4 = 0;
    do
    {
        printf("choose 4 numbers, you dont need space\n");
        scanf("%1d%1d%1d%1d", &num1, &num2, &num3, &num4);
        if(!num1 || !num2 || !num3 || !num4)
        {
            getchar();
        }
    }
    while (num1 != num2 || num1 != num3 || num1 != num4 ||
           num2 != num3 || num2 != num4 || num3 != num4); 

}

Я не знаю, что с этим делать.

Если ввод, например.*/*- тогда вывод:

choose 4 numbers, you dont need space 
choose 4 numbers, you dont need space 
choose 4 numbers, you dont need space 
choose 4 numbers, you dont need space

1 Ответ

0 голосов
/ 29 декабря 2018

Ваш код ведет себя так, как вы описали, потому что функция scanf не касается буфера чтения, когда преобразование не может быть выполнено.Вызов функции в цикле попытается прочитать следующие символы как %d.

Ввод нечисловой последовательности никогда не остановит ваш код, как ожидалось.По этой причине вам следует проверить возвращаемое значение scanf, чтобы обнаружить неверные данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...