Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 300
Завершенные тесты: 1
#1

Отслеживание ввода данных в потоке cin - C++

04.10.2013, 18:03. Просмотров 358. Ответов 1
Метки нет (Все метки)

Добрый вечер.

Предположим такой код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
void fiterations(int &iter_i)
{
    if (!cin)
    {
        cout << "Некорректный ввод данных";
        //cin.clear();
        //cin.ignore(numeric_limits<streamsize>::max(),'\n');
    }
    else
    {
        (cin >> iter_i).get();  
    }
}
 
int main ()
{
int iter;
string str;
///////
///////
fiterations(iter);
////////
return 0;
}

По условию задачи, нужно ввести строчку, например

C++
1
cin >> str;
а только потом будет
C++
1
fiterations(iter);
откуда мы считаем первое "слово", а затем второе.

т.е., пользователь введёт:

iter 123;

и всё работает корректно.

НО если пользователь введёт iter q -- либо циклится этот fiterations(iter); , при этом iter не изменяется, либо (если убрать // с cin.clear и cin.ignore) код один раз пройдёт, зайдёт в условие else, потом выйдет, зайдёт ещё раз, зайдёт в if, выведет "Некорректный ввод данных" и пригласит к продолжению функций программы.

Почему он так делает? почему он сразу не воспринимает, что первая переменная типа char идёт, а не int?

Добавлено через 5 минут
т.е., он даже так делает:

(если ввели iter q)

1) заходит в функцию в else
2) выходит из функции с не изменённым iter_i
3) ещё раз читает строчку, при этом не запрашивает её ввести снова (т.е., запоминает старые значения)
4) заходит по условиям в эту функцию
5) вот теперь он прочитал и понял, что там совсем не то, что нужно
6) вышел
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.10.2013, 18:03     Отслеживание ввода данных в потоке cin
Посмотрите здесь:
C++ Исправить ошибку, при которой не работает cin после vector'a (лишний символ '\n' в потоке ввода)
Cin: проверка ввода данных C++
C++ scanf,cin разбор ввода данных
C++ Вывод данных структуры (оставление символа '\n' в потоке ввода)
C++ Поток ввода cin
cin.getline пропуск ввода C++
C++ cin остаток после ввода
C++ Функция ввода вместо cin
Игнорируются потоки ввода cin C++
C++ Ошибка потокового ввода cin
C++ Обработка ошибок ввода из потока cin
Очистка всего буфера ввода (cin) C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 300
Завершенные тесты: 1
07.10.2013, 22:43  [ТС]     Отслеживание ввода данных в потоке cin #2
Вечер добрый. И всё же, вопрос про "считывание" остался открытым.

Ещё раз.

Допустим, я ввела строчку

qwerty 123456
Через пробел, нажала Enter, наблюдаю.

Программа считывает

C++
1
(cin >> strr).get(); //strr - строчка string, остаток вышел char
qwerty, и в ходе дальнейшего кода выдаёт такую штуку:

C++
1
gets(s); //s - тот char остаток
По идее, если бы я напечатала:
qwerty
то мне бы пришлось ещё раз нажать на Enter, чтобы продолжить программу.
А можно как-то заранее проверить, есть ли там что-то для gets? И если ничего нет, то пропустить "какой-то там кусок кода".

Воооооот. Подскажите пожалуйста.

Добавлено через 26 минут
upр
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru