Проблема с getline. C++.

программирование программы C++ С++

Нужно ввести две(!) строки содержащие пробелы. При вводе второй строки программа записывает первый символ как переход на новую строку(Строка оканчивается точкой!).

Код:
#include <iostream>
#include <string>
using namespace std;
void main ()
{
//Obespe4im Vvod

string str1;
cout << "Please enter string 1: "<<endl;
getline(cin,str1,'.');
string str2;
cout << "Please enter string 2: "<<endl;
getline(cin,str2,'.');
cout << "You string 1: " << str1 <<endl;
cout << "You string 2: " << str2 <<endl;

//Obespe4im Vvod
}

Результат:
You string 1:" Введенная строка 1."
You string 2:"
Введенная строка 2."
Ответы:
Всё правильно. Так как в качестве разделителя строк используется символ ".", то в потоке остаётся символ перевода каретки (при нажатии enter в консоли символ каретки записывается в поток, который и считывается во вторую строку). Если Вы введёте в консоли в одну строку например, "Test1.Test2.", То второй раз запрашивать строку с ожиданием программа не станет, а сразу выведет сообщение "Please enter string 2" и значение второй строки.
Поэтому считывайте строку целиком, с переводом строки, а затем извлекайте из неё информацию (чтение до символа точки).
Обратите внимание, функция getline удаляет из потока разделители! То есть как символ точки, так и символ перевода каретки (новая строка).


13 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.