Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.82/65: Рейтинг темы: голосов - 65, средняя оценка - 4.82
63 / 64 / 11
Регистрация: 27.02.2013
Сообщений: 1,116

Считать строку с консоли

18.09.2014, 10:13. Показов 13758. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
такая задачка, препод хочет чтобы мы не юзали класс string, а юзали массивы символов, причем только динамические (лаба такая просто), запретил выделять буфер (например char* str = new char[100]), так как же мне считать строку с консоли??? читать посимвольно с помощью cin.get и каждый раз перевыделять память на 1 символ? или может есть какая то специальная функция для такого случая?

Добавлено через 1 минуту
потому что getline вроде бы требует задать количество считываемых символов, а я не знаю сколько их будет...

Добавлено через 48 секунд
хотя вот со string я бы сделал так: getline(cin, str) и оно канает, может можно и с массивом как то так заюзать?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.09.2014, 10:13
Ответы с готовыми решениями:

Считать строку из консоли
Как в с++ получить в виде строки то, что ответила система на команду. То есть если я, к примеру, выполняю system("dir") как можно...

Считать строку из консоли
Добрый день. Как правильно написать для считывания строки из консоли? Пишу так: #include <iostream> #include...

Считать строку из консоли
Здравствуйте. Скажите, пожалуйста, как можно считать текст из консоли, завершающийся EOF? Хотел так, но тут не вводятся пробелы: ...

30
 Аватар для worldown
189 / 177 / 111
Регистрация: 22.06.2009
Сообщений: 533
18.09.2014, 18:40
Студворк — интернет-сервис помощи студентам
zss ну хоть строку вводи, выводи, в чем проблема.. другой вопрос, что скорее всего это не безопасно.. (хотя на сколько я помню new оперирует с "кучей"),
ПЫСЭ да и зачем вы все там поменяли.. смысл тоже поменялся

Добавлено через 8 минут
я имел ввиду использовать "char* i = new char;" а не "char* i = new char[N];"
но работать с переменной i как с массивом char, во всяком случае, изначальной код что я скинул у меня пашет (в иострим о печатался) и в указатель i сливается вся строка...

Добавлено через 14 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
 
using namespace std;
 
int main()
{
   char *str = new char;
   cin>>str;
   cout << str << endl; 
   delete [] str;
   return 0;
}
вот что я имел ввиду http://ideone.com/fork/VFEHpM, жмите "Run"
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
18.09.2014, 20:36
Цитата Сообщение от GetHelp Посмотреть сообщение
препод хочет чтобы мы не юзали класс string, а юзали массивы символов, причем только динамические (лаба такая просто), запретил выделять буфер (например char* str = new char[100])
а как звучал этот запрет? Просто я все больше и больше склоняюсь к мысли, что задание было наподобие такого: считать посимвольно в массив строку с консоли, нет?
Цитата Сообщение от worldown Посмотреть сообщение
вот что я имел ввиду http://ideone.com/fork/VFEHpM, жмите "Run"
а что мы там должны увидеть, собственно? Ошибку сегментации?
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,819
18.09.2014, 20:45
Цитата Сообщение от KOPOJI Посмотреть сообщение
а что мы там должны увидеть, собственно?
Увидим неопределенное поведение
0
 Аватар для worldown
189 / 177 / 111
Регистрация: 22.06.2009
Сообщений: 533
19.09.2014, 03:04
Да, возможно он не надежен, но и в условии ничего не сказанно о надежности.. лишь предложел некий выход из ситуации, для исполнения каприза препода,..И поверьте это работает. )) а что предложили вы?? только умничать горазды. С уважением.
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
19.09.2014, 07:28
Цитата Сообщение от GetHelp Посмотреть сообщение
юзать в функции 2 раза return это преступление, за него надо руки отрубать -_-
Страуструпу тогда тоже руки отрубите:
Цитата Сообщение от Бьярне Страуструп
2.3.2. Операторы ветвления и циклы
Язык C++ обеспечивает общепринятый набор операторов ветвления и цикла.
Для примера рассмотрим функцию, выводящую приглашение к вводу и
возвращающую булевское (логическое) значение, зависящее от ввода пользователя:
C++
1
2
3
4
5
6
7
8
bool accept () 
{ 
    cout << "Do you want to proceed {y or n) ? \n"; // вывести вопрос 
    char answer = 0; 
    cin >> answer; //считать ответ 
    if (answer == 'y' ) return true; 
    return false; 
}
P.S. Практически в каждой теме, в которой люди Вам совершенно бескорыстно помогают, Вы им беспардонно грубите.
Это у Вас так благодарность проявляется?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
19.09.2014, 10:10
Цитата Сообщение от worldown Посмотреть сообщение
Да, возможно он не надежен, но и в условии ничего не сказанно о надежности
Ну да, правильно) Об этом обычно не упоминают, значит можно везде лепить код на "авось сработает", железно
Цитата Сообщение от worldown Посмотреть сообщение
а что предложили вы??
предложил уточнить задание:
Цитата Сообщение от KOPOJI Посмотреть сообщение
а как звучал этот запрет? Просто я все больше и больше склоняюсь к мысли, что задание было наподобие такого: считать посимвольно в массив строку с консоли, нет?
Цитата Сообщение от worldown Посмотреть сообщение
только умничать горазды........С уважением
Имхо, это две взаимоисключающие фразы
gru74ik, думаю, что в данном случае это просто для более понятного кода. Практически на 100% уверен, что сам Страуструп, если бы писал такую программу не для книги, а вообще, написал бы как-то так:
C++
1
return answer == 'y';
Добавлено через 2 минуты
а вот еще несколько примеров с множественными возвратами Определить, является ли натуральное число n степенью числа 3
0
19.09.2014, 14:20

Не по теме:

Цитата Сообщение от GetHelp Посмотреть сообщение
препод хочет чтобы мы не юзали класс string
Цитата Сообщение от GetHelp Посмотреть сообщение
юзать в функции 2 раза return это преступление
Цитата Сообщение от GetHelp Посмотреть сообщение
юзали массивы символов, причем только динамические (лаба такая просто), запретил выделять буфер
Преп - Дугин от программирования, и ученики - достойные.

0
63 / 64 / 11
Регистрация: 27.02.2013
Сообщений: 1,116
20.09.2014, 19:01  [ТС]
Цитата Сообщение от IrineK Посмотреть сообщение
Возможно, нужно писать в православном С. Тогда память выделяется malloc.
нет...
Цитата Сообщение от KOPOJI Посмотреть сообщение
По вашему, надо обязательно так, да?
да именно так
Цитата Сообщение от KOPOJI Посмотреть сообщение
а как звучал этот запрет? Просто я все больше и больше склоняюсь к мысли, что задание было наподобие такого: считать посимвольно в массив строку с консоли, нет?
нет, смысл вообще не в работе со строками, а в классах, просто препод придрался, а я педант =)
Цитата Сообщение от gru74ik Посмотреть сообщение
P.S. Практически в каждой теме, в которой люди Вам совершенно бескорыстно помогают, Вы им беспардонно грубите.
Это у Вас так благодарность проявляется?
это не была грубость имхо, я лишь указал что такое построение кода в корни неверно, во всяком случае меня так учили...
Цитата Сообщение от IrineK Посмотреть сообщение
Преп - Дугин от программирования, и ученики - достойные.
шта?? ниче не понял -_-

вот короче в итоге я извратился так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
char* GetString()
{
    char* str = new char;
    size_t length = 1;
    while ((str[length - 1] = getchar()) != '\n')
    {
        char* tmp = new char[length];
        memcpy(tmp, str, length);
        delete[] str;
        str = new char[length + 1];
        memcpy(str, tmp, length++);
        delete[] tmp;
    }
    str[length - 1] = 0;
    return str;
}
Добавлено через 34 минуты
так теперь еще вопросы возникли:
1. getchar - не из плюсов, желательно ее заменить на что то более плюсовое... кто нибудь знает какой то аналог на плюсах? я знаю только cin.get, но он ждет нажатия, а мне нужно чтобы считывалось посимвольно после enter-а как в getchar... можно конечно попробовать накидать аналог getchar на плюсах, но может есть что то готовое?
2. мне там дальше надо сделать аналогичное считывание из текстового файла (т.е. также до '\n'), можно ли как то приспособить мою функцию для этого? ну скажем передавать в нее параметром какой то общий объект обозначающий поток ввода будь то консоль или файл... что то типа iostream и его потом юзать при считывании символов... т.е. чтобы не писать 2 функции для консоли и файла
0
20.09.2014, 20:11

Не по теме:

Цитата Сообщение от GetHelp Посмотреть сообщение
можно конечно попробовать накидать аналог getchar на плюса
Точно, секта.

0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
20.09.2014, 20:36
Лучший ответ Сообщение было отмечено GetHelp как решение

Решение

Цитата Сообщение от GetHelp Посмотреть сообщение
getchar - не из плюсов, желательно ее заменить на что то более плюсовое...
C++
1
2
3
4
5
6
std::istream& in = std::cin;
char tmp;
while(in.get(tmp))
{
    //......
}
Цитата Сообщение от GetHelp Посмотреть сообщение
мне там дальше надо сделать аналогичное считывание из текстового файла
не понял, чем не устраивает работа со строкой std::string, а не посимвольно. Но если надо - читайте также посимвольно с помощью in.get(char)
Цитата Сообщение от GetHelp Посмотреть сообщение
т.е. чтобы не писать 2 функции для консоли и файла
нечто такое, что ли?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <fstream>
 
void outputChar(std::istream& in)
{
    char tmp;
    while(in.get(tmp) && tmp != '\n')
        std::cout << tmp << std::endl;
    std::cout << "End of line" << std::endl;
}
int main(int argc, char *argv[])
{
    std::istream& console = std::cin;
    std::fstream file("./file.txt");
    
    outputChar(file);
    outputChar(console);
    
    file.close();
}
Добавлено через 4 минуты

Не по теме:

какой ужасный код, все же, получился.. Ну, может, кто поправит на "как надо"

1
63 / 64 / 11
Регистрация: 27.02.2013
Сообщений: 1,116
20.09.2014, 20:47  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
C++
1
2
3
4
5
6
std::istream& in = std::cin;
char tmp;
while(in.get(tmp))
{
    //......
}
вооо спс не знал про такую перегрузку
Цитата Сообщение от KOPOJI Посмотреть сообщение
не понял, чем не устраивает работа со строкой std::string, а не посимвольно. Но если надо - читайте также посимвольно с помощью in.get(char)
ограничение лабы
Цитата Сообщение от KOPOJI Посмотреть сообщение
нечто такое, что ли?
да, спасибо все работает ^_^

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
char* GetString(istream& stream)
{
    char* str = new char;
    size_t length = 1;
    while ((stream.get(str[length - 1])) && (str[length - 1] != '\n'))
    {
        char* tmp = new char[length];
        memcpy(tmp, str, length);
        delete[] str;
        str = new char[length + 1];
        memcpy(str, tmp, length++);
        delete[] tmp;
    }
    str[length - 1] = 0;
    return str;
}
Добавлено через 2 минуты
Цитата Сообщение от KOPOJI Посмотреть сообщение
C++
1
2
std::istream& console = std::cin;
outputChar(console);
кстати можно передавать просто cin
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.09.2014, 20:47
Помогаю со студенческими работами здесь

Как считать строку с консоли?
есть код, если раскоментить с 55-ой по 62-ую будет вылетать при первом же сеттере surname. как это вообще связано?! программа туда еще не...

Считать посимвольно строку из консоли
Добрый день! Необходимо в программе организовать считывание длинной строки из консоли. Строка настолько длинная, что записывать её в память...

Можно ли считать с консоли строку по шаблону?
например, scanf можно считать число и записать в переменную. int n; scanf(&quot;%d&quot;, &amp;n); а если строка формата &quot;command...

Каким образом нормально считать с консоли строку?
Дело в том что необходимо считывать строки вводимые с консоли. Но полноценно это не выходит. Ф-ция scanf() обеспечивает считывание только...

Считать строку с консоли (из файла). Найти количество знаков препинания в строке
Считать строку с консоли (из файла). Найти количество знаков препинания в строке.Помогите пожалуйста с заданием. Написала только часть кода...


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

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
Новые блоги и статьи
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru