none
Не выполняется scanf RRS feed

  • Вопрос

  • Здравствуйте.

    MS VS2005, WinXP

    В приведенном коде при вводе на первый запрос нечислового значения, например буквы, не выполняется последующий запрос scanf ввода значения BBB. В чем проблема?
    Заранее благодарю за ответ!

    #include <stdio.h>
    #include <locale.h>
    #include <stdlib.h>
    #include <conio.h>
     
    unsigned short AAA, BBB;
    int c;//промежут. переменная для ввода значений
     
    void main()
    {
        setlocale(LC_CTYPE, "rus");
     
        printf_s("Введите AAA в диапазоне 0-7\n");
        scanf_s("%u", &c);
        while (c>7 || c<0) 
        {printf_s("Введенное значение AAA не в диапазоне 0-7\n");
        scanf_s("%u", &c);}
        AAA=c;
     
        printf_s("Введите BBB в диапазоне 0-7\n");
        scanf_s("%u", &c);
        while (c>7 || c<0) 
        {printf_s("Введенное значение BBB не в диапазоне 0-7\n");
        scanf_s("%u", &c);}
        BBB=c;
    }


    • Изменено AlexShag 19 марта 2016 г. 20:27
    19 марта 2016 г. 20:26

Ответы

  • Да, действительно, поток ввода переходит в состояние ошибки. Сбросить это состояние позволяет функция clearerr(stdin).

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    20 марта 2016 г. 16:53

Все ответы

  • При вводе не числового значения переменная с сохраняет свое первоначальное значение (0), условие продолжения цикла while становится ложным и он не выполняется.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    20 марта 2016 г. 6:27
  • Когда ваш алгоритм не работает так как вы ожидаете, то необходимо посмотреть его выполнение по шагам в отладчике. Это может понять, что в вашем алгоритме не так и внести в него корректировки. Так как с различными ключами компиляции программа может вести себя по разному.
    20 марта 2016 г. 8:04
  • Это так. Проблема в том, что не выполняется запрос scanf после вывода сообщения

    "Введите BBB в диапазоне 0-7\n". Видимо, после некорректного завершения первого запроса scanf, в котором  вместо числа введена буква, портится поток ввода данных.

    20 марта 2016 г. 16:43
  • В отладчике после вывода сообщения "Введите BBB в диапазоне 0-7\n" функция scanf не выполняется.  Видимо, после некорректного завершения первого запроса scanf, в котором  вместо числа введена буква, портится поток ввода данных.
    20 марта 2016 г. 16:44
  • Да, действительно, поток ввода переходит в состояние ошибки. Сбросить это состояние позволяет функция clearerr(stdin).

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    20 марта 2016 г. 16:53
  • Спасибо за помощь!
    21 марта 2016 г. 7:25
  • Спасибо за помощь!
    Если вам помог какой-то ответ и тема закрыта, то пожалуйста не забывайте пометить сообщение в качестве ответа.
    21 марта 2016 г. 8:46