1405 / 647 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
1

Что делает cin.get

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

Author24 — интернет-сервис помощи студентам
Вот код:
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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.09.2012, 21:18
Ответы с готовыми решениями:

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

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

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

Как работает cin.peek, cin,get, cin.ignore, cin.clear?
Здравствуйте, товарищи и не товарищи!:) Я только начал изучать C++, а уже использую вещи, которые...

28
601 / 569 / 104
Регистрация: 07.11.2010
Сообщений: 2,004
20.09.2012, 21:21 2
c чего вы взяли, что он должен вывести ее код?
0
1405 / 647 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
20.09.2012, 21:23  [ТС] 3
panicwassano, http://www.cplusplus.com/refer... tream/get/
int get();
Extracts a character from the stream and returns its value (casted to an integer).
0
127 / 125 / 16
Регистрация: 03.07.2011
Сообщений: 354
20.09.2012, 21:28 4
C++
1
std::numeric_limits<std::streamsize>::max()
подозреваю, что должно быть ::min()
1
1405 / 647 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
20.09.2012, 21:34  [ТС] 5
ZoRT, да, так работает. Спасибо. А почему именно так?
0
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
20.09.2012, 21:35 6
Dani, после некорректного ввода в переменную а, в потоке устанавливается бит failbit. Дальнейшие операции над потоком нельзя проводить, пока не будет выполнен std::istream::clear.
1
1405 / 647 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
20.09.2012, 21:42  [ТС] 7
Toshkarik, буква вместо разделителя (в данном случае), я правильно понял?
0
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
20.09.2012, 21:49 8
Тип переменной - int. Символы, кроме цифр, пробела, минуса или новой строки считаются за ошибку ввода.
1
1405 / 647 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
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
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
20.09.2012, 21:56 10
Dani, если честно, то понятия не имею. Возможно UB.
0
1405 / 647 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
20.09.2012, 21:57  [ТС] 11
Toshkarik, и совсем для нуба, что такое UB?
0
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
20.09.2012, 21:58 12
Undefined behavior
0
1405 / 647 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
20.09.2012, 21:59  [ТС] 13
Да, и если поставить cin.clear и вместо ::min ::max - оно не работает)
0
2848 / 1997 / 986
Регистрация: 21.12.2010
Сообщений: 3,705
Записей в блоге: 10
20.09.2012, 22:02 14
при вводе 1234i в буфере останется "i\n", приём гетпоинтер будет на букве i и cin.fail() будет true. putback() декрементит гетпоинтер и вставляет 'A', в буфере будет "Ai\n".
2
1405 / 647 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
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
127 / 125 / 16
Регистрация: 03.07.2011
Сообщений: 354
20.09.2012, 22:10 16
Цитата Сообщение от Dani Посмотреть сообщение
igorrr37, а почему такой код выводит 65?
вроде получается он ничего не удаляет из потока и выйдет тоже, что без строки с cin.ignore
1
1405 / 647 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
20.09.2012, 22:12  [ТС] 17
И почему, если заменить
C++
1
std::numeric_limits<std::streamsize>::min()
на
C++
1
std::numeric_limits<std::streamsize>::max()
, оно просит сделать еще ввод? Удалило все символы, получается?
0
2848 / 1997 / 986
Регистрация: 21.12.2010
Сообщений: 3,705
Записей в блоге: 10
20.09.2012, 22:26 18
std::numeric_limits<std::streamsize>::min() - число отрицательное, ignore() с ним ничего не игнорит
1
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
20.09.2012, 22:28 19
Получается, что 'A' попадает перед 'i'.
Миниатюры
Что делает cin.get  
1
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
20.09.2012, 22:38 20
Цитата Сообщение от Toshkarik Посмотреть сообщение
Dani, после некорректного ввода в переменную а, в потоке устанавливается бит failbit. Дальнейшие операции над потоком нельзя проводить, пока не будет выполнен std::istream::clear.
Как ни странно, делаю после cin >> a; cout << cin.fail(), выводит 0, как будто никакой ошибки не было.
1
20.09.2012, 22:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.09.2012, 22:38
Помогаю со студенческими работами здесь

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

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

Не могу понять на что способен sort, и что делает его компаратор
Недавно мой знакомый рассказывал что-то про sort,говорил что с помощью него можно сортировать как...

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

Я не могу понять что делает данная программа. Точнее что делают функции используемые в это коде
#include &lt;iostream&gt; #include &lt;Windows.h&gt; #include &lt;ctime&gt; using namespace std; int g(int a, int...

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru