С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.51/41: Рейтинг темы: голосов - 41, средняя оценка - 4.51
0 / 0 / 0
Регистрация: 25.06.2014
Сообщений: 9

Ввод строки в буфер

26.06.2014, 07:13. Показов 8641. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как считать строку с клавиатуры и оставить ее целой в буфере?
Исходя из своих знаний, нашел только такой вариант:
C++
1
2
3
char a;
cin.get(a);       // считываем 1 символ, остальное остается в буфере
cin.putback(a); // помещаем символ обратно
И тогда получаем целую строку.
Но хотелось бы реализовать это без лишних действий и переменных. Возможно ли это и если да то как?

Добавлено через 14 часов 46 минут
Неужели таких способов нет?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.06.2014, 07:13
Ответы с готовыми решениями:

Как скопировать из строки в буфер обмена
помогите скопировать длинное число из Edita в буфер по нажатию кнопки

Запись строки в буфер обмена clipboard
Коментарии в коде показывают что нужно доделать. Спасибо заранее. #include <iostream> #include <string> #include...

ввод строки
привет! у меня есть проблемка.. для начала прога: #include <stdlib.h> int main (void) { return system("ping...

16
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
26.06.2014, 07:42
Цитата Сообщение от JustTry Посмотреть сообщение
Но хотелось бы реализовать это без лишних действий и переменных.
Для чего нужно такое?
0
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
26.06.2014, 07:50
А не проще ли прочитать всю строку в массив
C++
1
2
char input_str[100];
cin.getline(input_str,100);
А дальше уж разбираться с ней как заблагорассудится!
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
26.06.2014, 08:15
Как считать строку с клавиатуры и оставить ее целой в буфере?
cin - istream. Значит, можно попробовать прочитать содержимое буфера через readsome и откатиться в начало через seekg. Вот сработает ли - другой вопрос. Может seekg выводит на заглушку выкидывающую исключение.
0
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
26.06.2014, 08:22
Цитата Сообщение от Renji Посмотреть сообщение
Вот сработает ли - другой вопрос
Я попробовал. Не получается - читает какую-то фигню.
0
0 / 0 / 0
Регистрация: 25.06.2014
Сообщений: 9
26.06.2014, 19:41  [ТС]
zss, хочу создавать строку и динамически выделять память ровно под нее. Что-то похожее на класс String пишу, для обучения.
0
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
26.06.2014, 20:25
Цитата Сообщение от JustTry Посмотреть сообщение
Что-то похожее на класс String пишу
Ну так и читайте целиком строку!
0
0 / 0 / 0
Регистрация: 25.06.2014
Сообщений: 9
26.06.2014, 20:39  [ТС]
zss, А в оригинале используется просто временный массив фиксированного размера?
0
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
26.06.2014, 21:03
В VS 2008, которой я пользуюсь, вообще не перегружен оператор ввода в строку.
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
26.06.2014, 22:03
Цитата Сообщение от zss Посмотреть сообщение
Ну так и читайте целиком строку!
ТС хочет сначала память, точно под строку, выделить.
0
Модератор
Эксперт JS
 Аватар для Eva Rosalene
5241 / 2115 / 416
Регистрация: 06.01.2013
Сообщений: 4,846
26.06.2014, 23:14
C++
1
cin.rdbuf()->in_avail()
Вернет количество символов в потоке.
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
26.06.2014, 23:25
Цитата Сообщение от JustTry Посмотреть сообщение
char a;
cin.get(a); // считываем 1 символ, остальное остается в буфере
cin.putback(a); // помещаем символ обратно
И тогда получаем целую строку.
Но хотелось бы реализовать это без лишних действий и переменных.
Это уже потом можно:
Цитата Сообщение от FraidZZ Посмотреть сообщение
cin.rdbuf()->in_avail()
0
Модератор
Эксперт JS
 Аватар для Eva Rosalene
5241 / 2115 / 416
Регистрация: 06.01.2013
Сообщений: 4,846
26.06.2014, 23:41
Угу, сначал очищаем буфер:
C++
1
cin.ignore(cin.rdbuf()->in_avail());
Затем нам необходимо запросить ввод строки у пользователя, для этого

C++
1
2
char a;
cin.get(a);
Теперь у нас в потоке введенная пользователем строка кроме первого символа. Выделяем буфер:

C++
1
2
int c = cin.rdbuf()->in_avail();
char *buf = new char[ c + 2 ]; //+ 2 для уже считанного символа плюс завершающий.
И считываем:

C++
1
cin.read(buf + 1, c);
Не забываем добавить '\0' (без понятия, добавляет ли его cin.read())

C++
1
buf[ c + 1 ] = '\0';
.

Все вместе:
C++
1
2
3
4
5
6
7
8
char a, *buf;
int c;
cin.ignore(cin.rdbuf()->in_avail());
cin.get(a);
c = cin.rdbuf()->in_avail();
buf = new char[ c + 2 ];
cin.read(buf + 1, c);
buf[ c + 1 ] = '\0';
1
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
26.06.2014, 23:52
FraidZZ, всё замечательно, но:
Цитата Сообщение от JustTry Посмотреть сообщение
Но хотелось бы реализовать это без лишних действий и переменных.
Цитата Сообщение от FraidZZ Посмотреть сообщение
char a;
cin.get(a);
Цитата Сообщение от JustTry Посмотреть сообщение
char a;
cin.get(a);
Переменных и действий столько же (вместо cin.putback(a) нужно добавить запись a в начало буфера - забыли сделать).
0
Модератор
Эксперт JS
 Аватар для Eva Rosalene
5241 / 2115 / 416
Регистрация: 06.01.2013
Сообщений: 4,846
26.06.2014, 23:56
Ну так ничего и не выкинешь

Заставить пользователя ввести что-то - надо, отсюда переменная a. Подсчитать надо, за этим переменная с. Ну и сам буфер - *buf.

Добавлено через 25 секунд
Имхо, это самый краткий способ.
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
26.06.2014, 23:59
Цитата Сообщение от FraidZZ Посмотреть сообщение
Ну так ничего и не выкинешь
Вот и я так думаю. Ничего другого в голову не приходит.
1
0 / 0 / 0
Регистрация: 25.06.2014
Сообщений: 9
27.06.2014, 06:39  [ТС]
Понятно. Раз короче не сделать то придется писать так. Всем спасибо за ответы )
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.06.2014, 06:39
Помогаю со студенческими работами здесь

Ввод строки
#include<iostream> #include<clocale> using namespace std; #define DEBUG class Monom{ protected: int Step,Kof; public: ...

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

с++ ввод строки и ....
По заданию: Пользователь вводит строку и символ, программа выводит сколько раз символ встречался в строке. в другой програмке я...

Ввод строки
Помогите решить такую проблему: Мне нужно ввести строку, которая состоит более 1 слова. когда я пишу: ... char a, b, c; ...

ввод строки
char FirstString, SecondString; cout << "Enter first string: "; gets(FirstString); cout << "Enter second string: "; ...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru