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

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

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

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

20.09.2012, 21:18. Просмотров 2949. Ответов 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
panicwassano
592 / 560 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
20.09.2012, 21:21 #2
c чего вы взяли, что он должен вывести ее код?
0
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,282
Записей в блоге: 2
Завершенные тесты: 1
20.09.2012, 21:23  [ТС] #3
panicwassano, http://www.cplusplus.com/reference/i...m/istream/get/
int get();
Extracts a character from the stream and returns its value (casted to an integer).
0
Venzo
125 / 123 / 4
Регистрация: 03.07.2011
Сообщений: 354
20.09.2012, 21:28 #4
C++
1
std::numeric_limits<std::streamsize>::max()
подозреваю, что должно быть ::min()
1
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,282
Записей в блоге: 2
Завершенные тесты: 1
20.09.2012, 21:34  [ТС] #5
ZoRT, да, так работает. Спасибо. А почему именно так?
0
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,386
Завершенные тесты: 1
20.09.2012, 21:35 #6
Dani, после некорректного ввода в переменную а, в потоке устанавливается бит failbit. Дальнейшие операции над потоком нельзя проводить, пока не будет выполнен std::istream::clear.
1
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,282
Записей в блоге: 2
Завершенные тесты: 1
20.09.2012, 21:42  [ТС] #7
Toshkarik, буква вместо разделителя (в данном случае), я правильно понял?
0
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,386
Завершенные тесты: 1
20.09.2012, 21:49 #8
Тип переменной - int. Символы, кроме цифр, пробела, минуса или новой строки считаются за ошибку ввода.
1
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,282
Записей в блоге: 2
Завершенные тесты: 1
20.09.2012, 21:52  [ТС] #9
Toshkarik, а почему, даже без cin.clear, поменяв
C++
1
std::numeric_limits<std::streamsize>::max()
на
C++
1
std::numeric_limits<std::streamsize>::min()
, оно заработало?
0
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,386
Завершенные тесты: 1
20.09.2012, 21:56 #10
Dani, если честно, то понятия не имею. Возможно UB.
0
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,282
Записей в блоге: 2
Завершенные тесты: 1
20.09.2012, 21:57  [ТС] #11
Toshkarik, и совсем для нуба, что такое UB?
0
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,386
Завершенные тесты: 1
20.09.2012, 21:58 #12
Undefined behavior
0
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,282
Записей в блоге: 2
Завершенные тесты: 1
20.09.2012, 21:59  [ТС] #13
Да, и если поставить cin.clear и вместо ::min ::max - оно не работает)
0
igorrr37
1647 / 1275 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
20.09.2012, 22:02 #14
при вводе 1234i в буфере останется "i\n", приём гетпоинтер будет на букве i и cin.fail() будет true. putback() декрементит гетпоинтер и вставляет 'A', в буфере будет "Ai\n".
2
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,282
Записей в блоге: 2
Завершенные тесты: 1
20.09.2012, 22:06  [ТС] #15
igorrr37, а почему такой код выводит 65?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
 
int main()
{
    int a;
    std::cin >> a; 
    std::cin.putback ('A');
    std::cout << std::cin.failbit  << std::endl;
    //std::cin.clear();
    std::cin.ignore(std::numeric_limits<std::streamsize>::min(), '\n');
    std::cout << std::cin.get() << std::endl;
    system ("pause");
    return 0;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.09.2012, 22:06
Привет! Вот еще темы с ответами:

Что это за знак >> прочитал что это сдвиг вправо? что он делает - 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 - осмелюсь написать что они используют те же механизмы не знаю покажется ли это кому то интересным,...


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
20.09.2012, 22:06
Ответ Создать тему
Опции темы

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