Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.67
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,295
Записей в блоге: 2
Завершенные тесты: 1
#1

Что делает cin.get - C++

20.09.2012, 21:18. Просмотров 3135. Ответов 28
Метки нет (Все метки)

Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
 
int main()
{
    int a;
    std::cin >> a; 
    std::cin.putback ('A');
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    std::cout << std::cin.get() << std::endl;
    system ("pause");
    return 0;
}
Почему он не выводит код буквы А? Как я думаю, если ввести сначала "1234i", cin прочтет 1234 и останется буква i. Затем в поток к букве i и переводу строки в ней, добавится буква А. Потом, ignore сотрет все символы вместе с '\n' и останется одна А, которую cin.get и должен вывести (ее код).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.09.2012, 21:18
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Что делает cin.get (C++):

Что делает cin.ignore(); - C++
Поясните мне, какое действие выполняет функция: cin.ignore(); Лучше на примере каком нибудь!(с комментариями) Может быть это что-то...

Что делает метод cin.ignore? - C++
cin.ignore(0,'\n'); Что она делает?

Что делает цикл "while(cin.getline(buf,l_buf))" ? - C++
не могу понять,что делает цикл:while(cin.getline(buf,l_buf))-это по сути проверка на ввод строки? cin.getline()-вводит строку ...

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

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

Что в программе делает так, что процессор грузится на 100%? - C++
Я не очень разбираюсь в С++, поэтому прошу вашей подсказки по поводу нагрузки на процессор. Вот код программы, на компьютере жрет всю...

28
Venzo
125 / 123 / 4
Регистрация: 03.07.2011
Сообщений: 354
20.09.2012, 22:10 #16
Цитата Сообщение от Dani Посмотреть сообщение
igorrr37, а почему такой код выводит 65?
вроде получается он ничего не удаляет из потока и выйдет тоже, что без строки с cin.ignore
1
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,295
Записей в блоге: 2
Завершенные тесты: 1
20.09.2012, 22:12  [ТС] #17
И почему, если заменить
C++
1
std::numeric_limits<std::streamsize>::min()
на
C++
1
std::numeric_limits<std::streamsize>::max()
, оно просит сделать еще ввод? Удалило все символы, получается?
0
igorrr37
1837 / 1455 / 224
Регистрация: 21.12.2010
Сообщений: 2,410
Записей в блоге: 11
20.09.2012, 22:26 #18
std::numeric_limits<std::streamsize>::min() - число отрицательное, ignore() с ним ничего не игнорит
1
alsav22
5436 / 4831 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.09.2012, 22:28 #19
Получается, что 'A' попадает перед 'i'.
1
Миниатюры
Что делает cin.get  
alsav22
5436 / 4831 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.09.2012, 22:38 #20
Цитата Сообщение от Toshkarik Посмотреть сообщение
Dani, после некорректного ввода в переменную а, в потоке устанавливается бит failbit. Дальнейшие операции над потоком нельзя проводить, пока не будет выполнен std::istream::clear.
Как ни странно, делаю после cin >> a; cout << cin.fail(), выводит 0, как будто никакой ошибки не было.
1
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,295
Записей в блоге: 2
Завершенные тесты: 1
20.09.2012, 22:40  [ТС] #21
alsav22, а у меня 2 выводит)
0
alsav22
5436 / 4831 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.09.2012, 22:58 #22
С проверкой на good().
0
Миниатюры
Что делает cin.get  
alsav22
5436 / 4831 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.09.2012, 23:22 #23
Ошибка будет, если первый символ не соответствует ожидаемому типу. Если как в данном случае, то ошибки не будет.
0
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,295
Записей в блоге: 2
Завершенные тесты: 1
20.09.2012, 23:33  [ТС] #24
что-то я запутался
0
alsav22
5436 / 4831 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.09.2012, 23:39 #25
Цитата Сообщение от Dani Посмотреть сообщение
что-то я запутался
В трёх соснах? Вопрос возник из-за putback (). Сам не знал, что он помещает символ первым в очереди.
0
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,295
Записей в блоге: 2
Завершенные тесты: 1
21.09.2012, 00:03  [ТС] #26
Цитата Сообщение от alsav22 Посмотреть сообщение
В трёх соснах?
Dani, после некорректного ввода в переменную а, в потоке устанавливается бит failbit. Дальнейшие операции над потоком нельзя проводить, пока не будет выполнен std::istream::clear.
Как ни странно, делаю после cin >> a; cout << cin.fail(), выводит 0, как будто никакой ошибки не было.
вроде получается он ничего не удаляет из потока и выйдет тоже, что без строки с cin.ignore
Вместо сосен - ответы)
0
alsav22
21.09.2012, 00:36
  #27

Не по теме:

Цитата Сообщение от Dani Посмотреть сообщение
Вместо сосен - ответы)
Не один вы путаетесь.

0
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,295
Записей в блоге: 2
Завершенные тесты: 1
21.09.2012, 00:46  [ТС] #28
Так все таки, будет ошибка ввода, или нет?
0
alsav22
5436 / 4831 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.09.2012, 00:53 #29
Цитата Сообщение от Dani Посмотреть сообщение
Так все таки, будет ошибка ввода, или нет?
23 пост. Скрины подтверждают.

Добавлено через 2 минуты
Поставьте после cin >> проверку на good() и сами посмотрите. Введите сразу символ.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.09.2012, 00:53
Привет! Вот еще темы с ответами:

Что это за знак >> прочитал что это сдвиг вправо? что он делает - C++
int d=6, c=5,f; f = d &gt;&gt; c; cout&lt;&lt; f; вывод 0

Что это за метод?И что он делает? - C++
double func (double y, int k, int n){ double y1; for (int i=0; i&lt;=n+1;i++) y1=0; double t; t=0; y1=1; ...

Что не так с оператором cin? - C++
Задание найти сумму первых N чисел из введенных ранее. С помощью оператора cin ввожу числа в вектор, для остановки ввожу символ /,...

Что такое CIN и COUT - C++
фоном звучит вопрос printf и scanf - осмелюсь написать что они используют те же механизмы не знаю покажется ли это кому то интересным,...


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

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

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