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

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

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

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

04.10.2013, 18:03. Просмотров 362. Ответов 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' в потоке ввода) - C++
Столкнулся с этой проблемой в другой программе,но решил написать более примитивную и посмотреть, что будет. В итоге тоже самое после cin...

Cin: проверка ввода данных - C++
Выполняю одну задачку, с проверкой на ввод данных типа int/double, ошибка, если - введены данные типа char. Внизу код(в разработке),...

scanf,cin разбор ввода данных - C++
Доброго времени суток :) Подскажите как взять с консоли или скажем с файла(fscanf) 2 числа и текст между (текст и числа разделены знаками...

Вывод данных структуры (оставление символа '\n' в потоке ввода) - C++
for (int i = 0; i &lt; 8; i++) { cout &lt;&lt; &quot;Введите фамилию и имя&quot; &lt;&lt; endl; getline(cin, BLOCKNOTE.NAME); file &lt;&lt; &quot;Имя и...

Защита от дурака при вводе текста с помощью: cin.get cin.clear cin.sync - C++
Доброго времени суток. На С++ учусь с недавних пор. Имеется стандартная &quot;защита от дурака&quot; на ввод. Не пойму предназначение cin.get() !=...

Объясните пожалуйста как работают cin.good(), cin.sync(), cin.clear() - C++
Такая проблема: сдаю в вуза лабораторные по программированию, писал все сам, до этого c++ не изучал, поэтому возникали некоторые проблемы....

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

Ещё раз.

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

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

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

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

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

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

Добавлено через 26 минут
upр
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.10.2013, 22:43
Привет! Вот еще темы с ответами:

Поток ввода cin - C++
Привет. Я только начинаю учить C++, так что не смейтесь если проблема примитивная, но всё равно прошу помочь :) Учусь по книге...

cin.getline пропуск ввода - C++
Стыдно 3 раз за сегодня обращаться по мелким проблемам, но увы, гугл не помогает. Сама проблема заключается вот в чем. В первом вводе,...

cin остаток после ввода - C++
int b1=0; int b2=0; cout&lt;&lt;&quot;Введите b1 и b2: &quot;; cin&gt;&gt;b1&gt;&gt;b2; Вопрос такой, если мы введем: 1 2 3, то считается 1 и 2, но как...

Функция ввода вместо cin - C++
Здорова! Нужно написать функцию ввода вместо cin, которая бы читала строки. Я не знаю чем можно заменить cin. Нужно постараться...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

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