Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.07.2017, 23:58   #1
Pavel.mcd
Новичок
Джуниор
 
Регистрация: 04.07.2017
Сообщений: 2
По умолчанию Помогите разобраться со вводом строки

Здравствуйте столкнулся с магической проблемой
функция getline(); криво работает когда вызывается с другой функции.
Вот код:
Код:
#include <iostream>
#include <string>
using namespace std;

void ilove(int i){
	string a;
	switch (i) {
	case 1:
		cout << "я люблю" << endl;;
		getline(cin, a);
		if (a == "i love") {
			cout << "it's true!" << endl;;
		}
		else cout << "it's false" << endl;;
		break;
	case 2:
		cout << "Я любил" << endl;
		getline(cin, a);
		if (a == "i loved") {
			cout << "it's true!" << endl;;
		}
		else cout << "it's false" << endl;;
		break;

	}
}

int main()
{
	setlocale(0, "");
	int enter;
	cout << "enter 1 or 2" << endl;
	cin >> enter;
	ilove(enter);

	system("pause");
	return 0;
}
Почему-то не запрашивает ввести массив строк, а сразу выдает альтернативный вариант ответа else и досвидания. Пытался дебажить но когда делал шаг с заходом, ничего не понял...

Последний раз редактировалось Аватар; 05.07.2017 в 08:51.
Pavel.mcd вне форума Ответить с цитированием
Старый 05.07.2017, 08:42   #2
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 729
По умолчанию

Значит проблемы в следующем:
1) У Вас по 2-е точки с запятой в строках где слова выводятся на консоль;
2) И самое главное. Тут приколы с потоками. Когда Вы вызываете вот это:
Код:
cout << "я люблю" << endl;;
getline(cin, a);
getline берет символ переноса строки, который остался в потоке, поэтому нужно делать либо так:
Код:
getline(cin, a);
getline(cin, a);
либо так:
Код:
cin.sync();
getline(cin, a);
Cuprum5 вне форума Ответить с цитированием
Старый 05.07.2017, 11:06   #3
Мановар
Пользователь
 
Регистрация: 13.11.2016
Сообщений: 84
По умолчанию

либо,
Код:
(cin >> enter).get();
Мановар вне форума Ответить с цитированием
Старый 12.07.2017, 19:32   #4
Pavel.mcd
Новичок
Джуниор
 
Регистрация: 04.07.2017
Сообщений: 2
По умолчанию

Цитата:
Сообщение от Cuprum5 Посмотреть сообщение
Значит проблемы в следующем:
1) У Вас по 2-е точки с запятой в строках где слова выводятся на консоль;
2) И самое главное. Тут приколы с потоками. Когда Вы вызываете вот это:
Код:
cout << "я люблю" << endl;;
getline(cin, a);
getline берет символ переноса строки, который остался в потоке, поэтому нужно делать либо так:
Код:
getline(cin, a);
getline(cin, a);
либо так:
Код:
cin.sync();
getline(cin, a);
спасибо
Pavel.mcd вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Братья помогите: помогите с кодом VBA чтобы, заполнить диапазон строк названием улицы из верхней строки, до строки с другой улицей vasjaspb Microsoft Office Access 0 08.06.2016 22:17
Помогите со вводом текста Vlad1698 Общие вопросы Delphi 6 23.08.2014 21:54
Строки;( Проблемы с вводом. Aerial Общие вопросы C/C++ 0 20.04.2010 21:00
Не могу разобраться как менять строки в масмсиве Ker_33rus Общие вопросы C/C++ 4 10.11.2009 11:18