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

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

Восстановить пароль Регистрация
 
Nullik
 Аватар для Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 297
Завершенные тесты: 1
04.10.2013, 18:03     Отслеживание ввода данных в потоке cin #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++ scanf,cin разбор ввода данных
C++ ошибка потокового ввода cin
C++ функция ввода вместо cin
C++ cin остаток после ввода
cin.getline пропуск ввода C++
C++ Есть ли способ закончить "cin" и продолжить программу без ввода?
Очистка буфера ввода при работе с cin C++
Работа с cin при считывании с потока ввода C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nullik
 Аватар для Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 297
Завершенные тесты: 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р
Yandex
Объявления
07.10.2013, 22:43     Отслеживание ввода данных в потоке cin
Ответ Создать тему
Опции темы

Текущее время: 14:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru