Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.53/34: Рейтинг темы: голосов - 34, средняя оценка - 4.53
1406 / 648 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2

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

20.09.2012, 21:18. Показов 6890. Ответов 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
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.getline()-вводит строку ...

28
601 / 569 / 104
Регистрация: 07.11.2010
Сообщений: 2,004
20.09.2012, 21:21
c чего вы взяли, что он должен вывести ее код?
0
1406 / 648 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
20.09.2012, 21:23  [ТС]
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
 Аватар для Venzo
127 / 125 / 16
Регистрация: 03.07.2011
Сообщений: 354
20.09.2012, 21:28
C++
1
std::numeric_limits<std::streamsize>::max()
подозреваю, что должно быть ::min()
1
1406 / 648 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
20.09.2012, 21:34  [ТС]
ZoRT, да, так работает. Спасибо. А почему именно так?
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
20.09.2012, 21:35
Dani, после некорректного ввода в переменную а, в потоке устанавливается бит failbit. Дальнейшие операции над потоком нельзя проводить, пока не будет выполнен std::istream::clear.
1
1406 / 648 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
20.09.2012, 21:42  [ТС]
Toshkarik, буква вместо разделителя (в данном случае), я правильно понял?
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
20.09.2012, 21:49
Тип переменной - int. Символы, кроме цифр, пробела, минуса или новой строки считаются за ошибку ввода.
1
1406 / 648 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
20.09.2012, 21:52  [ТС]
Toshkarik, а почему, даже без cin.clear, поменяв
C++
1
std::numeric_limits<std::streamsize>::max()
на
C++
1
std::numeric_limits<std::streamsize>::min()
, оно заработало?
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
20.09.2012, 21:56
Dani, если честно, то понятия не имею. Возможно UB.
0
1406 / 648 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
20.09.2012, 21:57  [ТС]
Toshkarik, и совсем для нуба, что такое UB?
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
20.09.2012, 21:58
Undefined behavior
0
1406 / 648 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
20.09.2012, 21:59  [ТС]
Да, и если поставить cin.clear и вместо ::min ::max - оно не работает)
0
 Аватар для igorrr37
2890 / 2037 / 992
Регистрация: 21.12.2010
Сообщений: 3,788
Записей в блоге: 9
20.09.2012, 22:02
при вводе 1234i в буфере останется "i\n", приём гетпоинтер будет на букве i и cin.fail() будет true. putback() декрементит гетпоинтер и вставляет 'A', в буфере будет "Ai\n".
2
1406 / 648 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
20.09.2012, 22:06  [ТС]
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
 Аватар для Venzo
127 / 125 / 16
Регистрация: 03.07.2011
Сообщений: 354
20.09.2012, 22:10
Цитата Сообщение от Dani Посмотреть сообщение
igorrr37, а почему такой код выводит 65?
вроде получается он ничего не удаляет из потока и выйдет тоже, что без строки с cin.ignore
1
1406 / 648 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
20.09.2012, 22:12  [ТС]
И почему, если заменить
C++
1
std::numeric_limits<std::streamsize>::min()
на
C++
1
std::numeric_limits<std::streamsize>::max()
, оно просит сделать еще ввод? Удалило все символы, получается?
0
 Аватар для igorrr37
2890 / 2037 / 992
Регистрация: 21.12.2010
Сообщений: 3,788
Записей в блоге: 9
20.09.2012, 22:26
std::numeric_limits<std::streamsize>::mi n() - число отрицательное, ignore() с ним ничего не игнорит
1
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
20.09.2012, 22:28
Получается, что 'A' попадает перед 'i'.
Миниатюры
Что делает cin.get  
1
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
20.09.2012, 22:38
Цитата Сообщение от Toshkarik Посмотреть сообщение
Dani, после некорректного ввода в переменную а, в потоке устанавливается бит failbit. Дальнейшие операции над потоком нельзя проводить, пока не будет выполнен std::istream::clear.
Как ни странно, делаю после cin >> a; cout << cin.fail(), выводит 0, как будто никакой ошибки не было.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.09.2012, 22:38
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru