Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
6 / 6 / 0
Регистрация: 07.07.2021
Сообщений: 32

Iostream , .put(), .get()

26.07.2021, 19:31. Показов 1769. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Небольшой момент, функция cin.get() извлекает 1 символ, а cout.put() выводит.
Вот фрагмент:
C++
1
2
    ch=cin.get();
    cout.put(ch);
Если набрать строку, вывод напечатает только первый символ.


Вот применен цикл:
C++
1
2
3
4
5
    
while(!cin.eof()){
    ch=cin.get();
    cout.put(ch);
    }
Каким образом вывод отображает весь ввод с помощью put(), а не по 1 символу? К чему конкретно применяется цикл/итерация? Почему выводит не посимвольно сколько-то раз, а все сразу, здесь что, применяется перегрузка и цикла тоже? Или как-то связано с буферизацией? И как в этом случае зациклить первый фрагмент кода(возваращшаясь к простому)?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.07.2021, 19:31
Ответы с готовыми решениями:

В чём отличие заголовочных файлов <iostream> и <iostream.h> ?
Добрый день! Учу С++ в Microsoft Visual C++ 6.0. Листинг начинал с #include &lt;iostream&gt;, и программа не работала. Но когда начал с...

Get and Put
ребята помогите исправить методы get and put. Там нужно переделать под (i-1) (j-1) в общем под двумерный массив public int get(int...

WebDav PUT
Всем привет! Прочитал замечательную статью: http://www.webdelphi.ru/2012/07/yandeks/ Все прекрасно работает! Но, как загрузить файл...

6
Модератор
 Аватар для long399
2882 / 1837 / 933
Регистрация: 16.10.2013
Сообщений: 5,242
Записей в блоге: 15
27.07.2021, 09:10
Цитата Сообщение от _abstract_mem Посмотреть сообщение
Почему выводит не посимвольно сколько-то раз, а все сразу, здесь что, применяется перегрузка и цикла тоже?
Вы о чем? в цикле как-раз посимвольный вывод идет, там ничего "сразу" не выводится.

C++
1
2
3
4
do {
    ch=cin.get();
    cout.put(ch);
} while (ch != '\n');
0
6 / 6 / 0
Регистрация: 07.07.2021
Сообщений: 32
27.07.2021, 13:59  [ТС]
Цитата Сообщение от long399 Посмотреть сообщение
Вы о чем? в цикле как-раз посимвольный вывод идет, там ничего "сразу" не выводится.
Сейчас поясню, пересмотрел кое-что, надо переформулировать. Тут видимо какая-то особенность внутренней механики потоков, не самих циклов. При которой результат отличен от ожидаемого(мной))

C++
1
2
3
4
5
6
7
8
    
    char ch;
        
    cin>>ch;    //первый ввод
    cout<<ch;
    cout<<endl<<"___break___"<<endl;
    cin>>ch;    //второй ввод
    cout<<ch;
Первый ввод получает много символов, первый вывод отображает только первый символ из потока, пока все понятно. Затем непонятно, почему игнорируется второй ввод? Второй вывод отобразит второй символ из первого ввода. Если что, специально применил даже endl для очистки буфера.

Далее, если мы изменим ch на string, то будет вести ожидаемо, сначала сработает первый воод, потом его отобразит, потом после линии второе приглашение на ввод и отображение.
0
 Аватар для ram876
759 / 456 / 213
Регистрация: 19.12.2016
Сообщений: 1,815
27.07.2021, 14:25
В потоках не силен. Но когда вы вводите много символов после первого ввода, то первый символ записывается в ch, остальные символы, которые не влезли в переменную, остаются во входном потоке и ждут своей очереди, когда происходит второй ввод, в переменную записывается символ из предыдущего ввода, который не влез.
1
6 / 6 / 0
Регистрация: 07.07.2021
Сообщений: 32
27.07.2021, 15:01  [ТС]
Цитата Сообщение от ram876 Посмотреть сообщение
когда вы вводите много символов после первого ввода, то первый символ записывается в ch, остальные символы, которые не влезли в переменную, остаются во входном потоке и ждут своей очереди, когда происходит второй ввод, в переменную записывается символ из предыдущего ввода, который не влез
Ок, то есть второй ввод читает уже не с клавиатуры. Тогда как можно это продемонстрировать мне в данном простом римере? Никак не соображу. Чтобы оставшиеся символы довывелись, без цикла и тп. Чтобы второй ввод обратился к клавиатуре опять
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    char ch;
        
    cin>>ch;    //первый ввод
    cout<<ch;
    /*
    cout<<ch; 
    cout<<ch; //выводит несколькораз первый символ
    cout.write(ch, i); //не работает с одиночным char
    */
 
    cout<<endl<<"___break___"<<endl;
    cin>>ch;    //второй ввод
    cout<<ch;
0
 Аватар для ram876
759 / 456 / 213
Регистрация: 19.12.2016
Сообщений: 1,815
27.07.2021, 15:08
cin.ignore( k, '\n' ); // k - пропускаемое к-во символов, параметр '\n' можно опускать
cin.ignore( cin.rdbuf()->in_avail() ); // пропустить все оставшиеся символы
Рекомендую посмотреть Распрастраненные ошибки.
Да и всю ветку лучше прочитайте.
1
6 / 6 / 0
Регистрация: 07.07.2021
Сообщений: 32
27.07.2021, 15:48  [ТС]
Там не столько работа потока поясняется в ошибках, даже в 1500-страничной книге не помогло. Теперь проясняется, я отождествил почему-то объект ввода-вывода и поток.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.07.2021, 15:48
Помогаю со студенческими работами здесь

Assembler put
Начали изучать ассемблерные вставки в С++ как например в чаровском массиве изменять данные ? где можно наити описание всех...

Put / Get Extra
A1.class Intent in = new Intent(a1.this, a2.class); startActivity(a2); ...

PUT запрос
Полазив русскоязычные просторы интернета, не нашёл примера как отправить PUT запрос с параметрами которые можно как-то задавать. На...

PUT запрос
Помогите разобраться, POST/GET не решает проблему, нужно получить запрос методом PUT. Только не пойму как в C# мне прописать следующий...

Qftp put
пытаюсь залить файл на фтп, с маленькими файлами все ок, а вот с большими проблемка, заливаться то они заливаются но почему то с каким...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
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 https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
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 позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru