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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.05.2014, 14:31   #1
Cynically
Пользователь
 
Регистрация: 05.01.2013
Сообщений: 60
По умолчанию Траблы с getline в MS Visual Studio 2012.

Есть кусок кода:

Код:

string temp;

//...

for (int i = 0; i < n; i++)

	{   
		getline(cin,temp,'\n');
		str_key = temp.substr(0, temp.find("GMT"));
		str_in  = temp.substr(temp.find("GMT"), temp.back());
		cities.insert( pair<string,string>(str_key,str_in) );
	}

//...
Программа категорически игнорирует getline, как будто упуская из виду существование данной функции в исходном листинге с и без указанием разделителя в качестве третьего аргумента. В чем могут быть подводные камни? Помогите, пожалуйста.
Cynically вне форума Ответить с цитированием
Старый 04.05.2014, 15:13   #2
kineziz
Форумчанин
 
Регистрация: 22.12.2011
Сообщений: 378
По умолчанию

Попробуйте
Код:
std::cin.getline
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.
kineziz вне форума Ответить с цитированием
Старый 04.05.2014, 15:26   #3
Cynically
Пользователь
 
Регистрация: 05.01.2013
Сообщений: 60
По умолчанию

Цитата:
Сообщение от kineziz Посмотреть сообщение
Попробуйте
Код:
std::cin.getline
Прошу прощения, как мне известно, cin.getline в качестве аргумента требует тип char, а мне нужен именно string. Для этого я и использую getline.

Тип сhar я не могу использовать никак, иначе мне не будут доступны операции над string. Такие как substr.
Cynically вне форума Ответить с цитированием
Старый 04.05.2014, 15:28   #4
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Cynically Посмотреть сообщение
Программа категорически игнорирует getline, как будто упуская из виду существование данной функции в исходном листинге с и без указанием разделителя в качестве третьего аргумента.
Эта фраза не понятна.
_Bers вне форума Ответить с цитированием
Старый 04.05.2014, 16:38   #5
Cynically
Пользователь
 
Регистрация: 05.01.2013
Сообщений: 60
По умолчанию

Цитата:
Сообщение от _Bers Посмотреть сообщение
Эта фраза не понятна.
Уточню. Смотрел под отладчиком. Функция getline просто пропускается, никакого приглашения для ввода данных в консоль.
Cynically вне форума Ответить с цитированием
Старый 04.05.2014, 17:08   #6
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Cynically Посмотреть сообщение
Уточню. Смотрел под отладчиком. Функция getline просто пропускается, никакого приглашения для ввода данных в консоль.
выложите сюда минимально компилирующийся код, иллюстрирующий вашу проблему:

http://rextester.com/VJVS92369
_Bers вне форума Ответить с цитированием
Старый 04.05.2014, 17:49   #7
Cynically
Пользователь
 
Регистрация: 05.01.2013
Сообщений: 60
По умолчанию

Цитата:
Сообщение от _Bers Посмотреть сообщение
выложите сюда минимально компилирующийся код, иллюстрирующий вашу проблему:

http://rextester.com/VJVS92369
Странно, и вправду работает. Что ж тогда на Visual Studio отказывается так работать? Секунду, сейчас отправлю минимально копилирующийся код.

UPD:

http://rextester.com/edit/EDCR37440

Таки написал, а почему вместо трех hello он через getline выводит лишь два? Может быть, в этом проблема?

Последний раз редактировалось Cynically; 04.05.2014 в 17:59.
Cynically вне форума Ответить с цитированием
Старый 04.05.2014, 18:59   #8
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

посмотрите ещё раз:
http://rextester.com/edit/EDCR37440
_Bers вне форума Ответить с цитированием
Старый 04.05.2014, 21:03   #9
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

К стати реально

Цитата:
number of n: 3
0)
1) hello
2) hello

upd. а все.. понял, точнее не понял

Цитата:
3hello
hello
hello
Вот так работает. Я что-то не пойму, мы же вводим символ конца строки, иначе cin вообще не поймет что мы закончили ввод.
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс

Последний раз редактировалось ROD; 04.05.2014 в 21:10.
ROD вне форума Ответить с цитированием
Старый 04.05.2014, 21:59   #10
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

http://rextester.com/QBHK32293

Последний раз редактировалось _Bers; 04.05.2014 в 22:02.
_Bers вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Visual Studio Express 2012 Kris7 Помощь студентам 1 02.03.2015 19:27
Компиляция в Visual Studio 2012 Hellgate Помощь студентам 2 01.10.2013 12:09
Visual Studio 2010-2012 Генрюсай Visual C++ 0 29.05.2013 22:49
Visual Studio 2010-2012 Генрюсай C/C++ Базы данных 0 29.05.2013 22:48