Ввод строки в С++, решено (input_file >> line)

Модератор: Модераторы разделов

Аватара пользователя
kt315e
Сообщения: 318
ОС: Debian 11

Ввод строки в С++, решено

Сообщение kt315e »

Как ввести целиком строку из файла в С++
Вот это вводит не всю строку, а ограничивает до первого пробела.

Код: Выделить всё

ifstream input_file("w12.cfg");
if(input_file)
    {
    input_file >> line;
    cout << ":" << line << ":" << endl;
    }
Спасибо сказали:
math
Сообщения: 293
Статус: Ъ участник
ОС: Artix (= Arch without systemd)

Re: Ввод строки в С++, решено

Сообщение math »

см. след. пост, там вариант лучше, чем я сначала предложил
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Ввод строки в С++, решено

Сообщение watashiwa_daredeska »

std::getline
noskipws

math писал(а):
30.05.2010 20:24

Код: Выделить всё

char buffer[256];
input_file.getline(buffer, 256);
string line = buffer;
Гадость какая. :yuk:
Спасибо сказали:
Аватара пользователя
kt315e
Сообщения: 318
ОС: Debian 11

Re: Ввод строки в С++, решено

Сообщение kt315e »

watashiwa_daredeska писал(а):
30.05.2010 20:28
std::getline
noskipws

math писал(а):
30.05.2010 20:24

Код: Выделить всё

char buffer[256];
input_file.getline(buffer, 256);
string line = buffer;
Гадость какая. :yuk:

Спасибочки!!! Пробую.
P.S. getline - работает
Спасибо сказали:
SergiusTux
Сообщения: 14
ОС: GNU/Linux, Slackware

Re: Ввод строки в С++, решено

Сообщение SergiusTux »

kt315e писал(а):
30.05.2010 20:53
watashiwa_daredeska писал(а):
30.05.2010 20:28
std::getline
noskipws

math писал(а):
30.05.2010 20:24

Код: Выделить всё

char buffer[256];
input_file.getline(buffer, 256);
string line = buffer;
Гадость какая. :yuk:

Спасибочки!!! Пробую.
P.S. getline - работает


А если строка длиннее 255 символов? Лучше вот так:

Код: Выделить всё

std::string line;
std::getline(input_file,line);

Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Ввод строки в С++, решено

Сообщение drBatty »

watashiwa_darede... писал(а):
30.05.2010 20:28
Гадость какая.

ИМХО это просто не С++
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Ввод строки в С++, решено

Сообщение watashiwa_daredeska »

drBatty писал(а):
01.06.2010 03:41
ИМХО это просто не С++
Это C++, просто функция низкоуровневая. Она имеет право на жизнь, ибо позволяет программе не умирать при чтении 10GB строки из файла, в отличие от std::getline :)
Спасибо сказали:
SergiusTux
Сообщения: 14
ОС: GNU/Linux, Slackware

Re: Ввод строки в С++, решено

Сообщение SergiusTux »

watashiwa_daredeska писал(а):
01.06.2010 11:19
drBatty писал(а):
01.06.2010 03:41
ИМХО это просто не С++
Это C++, просто функция низкоуровневая. Она имеет право на жизнь, ибо позволяет программе не умирать при чтении 10GB строки из файла, в отличие от std::getline :)


Умно конечно, однако изначально вопрос поставлен был
Как ввести целиком строку из файла в С++

Использование обозначенной низкоуровневой функции не решает задачу.
Спасибо сказали:
math
Сообщения: 293
Статус: Ъ участник
ОС: Artix (= Arch without systemd)

Re: Ввод строки в С++, решено

Сообщение math »

SergiusTux писал(а):
01.06.2010 22:56
watashiwa_daredeska писал(а):
01.06.2010 11:19
drBatty писал(а):
01.06.2010 03:41
ИМХО это просто не С++
Это C++, просто функция низкоуровневая. Она имеет право на жизнь, ибо позволяет программе не умирать при чтении 10GB строки из файла, в отличие от std::getline :)


Умно конечно, однако изначально вопрос поставлен был
Как ввести целиком строку из файла в С++

Использование обозначенной низкоуровневой функции не решает задачу.

Если вы не заметили, то вы обсуждаете код, который был удалён автором поста сразу поста появления поста про std::getline. Не знаю почему, но в оффлайновой документации я никогда не находил этой функции, поэтому всю жизнь писал свои аналоги. Теперь я тоже пользуюсь std::getline.
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Ввод строки в С++, решено

Сообщение watashiwa_daredeska »

SergiusTux писал(а):
01.06.2010 22:56
Использование обозначенной низкоуровневой функции не решает задачу.
Зато решает задачу корректной обработки ситуации с разумным сообщением об ошибке, вместо забивания свопа и смерти от руки ООМ killer'а. std::getline могла бы решить эту проблему при наличии дополнительного параметра — максимального размера строки, но его нет, видимо решили, что раз переполнение буфера не грозит, то и не нужно.

math писал(а):
01.06.2010 23:14
Если вы не заметили, то вы обсуждаете код
Мы уже не код обсуждаем, а функции :)
Спасибо сказали: