Форум программистов, компьютерный форум CyberForum.ru

ostream_iterator - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.71
underwaterspace
2 / 2 / 0
Регистрация: 29.01.2013
Сообщений: 47
10.08.2013, 19:35     ostream_iterator #1
Имеется массив объектов string - result и текстовой файл. При выводе на экран с помощью
C++
1
2
ostream_iterator<string,char>out(cout,"\n")
copy(result.begin(),result.end(),out);
на каждой строке находится по объекту string. Но при попытке вывести в файл
C++
1
2
3
ofstream res;
res.open("1.txt");
copy(result.begin(),result.end(),ostream_iterator<string,char>(res,"\n"));
все объекты пишутся слитно. Что не так?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
10.08.2013, 19:45     ostream_iterator #2
попробуй в качестве разделителя
C++
1
"\r\n"
alex1392
31 / 31 / 3
Регистрация: 24.07.2013
Сообщений: 187
10.08.2013, 20:41     ostream_iterator #3
Цитата Сообщение от igorrr37 Посмотреть сообщение
попробуй в качестве разделителя
C++
1
"\r\n"
ябы сказал что тут разделитель данного плана подходит но это до ближайшего класса работает нормально _)
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
10.08.2013, 22:49     ostream_iterator #4
А как завершить ввод? Просто вот это:
C++
1
copy(istream_iterator<string>(cin),istream_iterator<string>() ,ostream_iterator<string>(cout, " ") );
бесконечно ждет ввода.

скопировал этот пример с cplusplus.com
C++
1
2
3
4
5
6
7
8
9
10
11
12
double value1, value2;
  std::cout << "Please, insert two values: ";
 
  std::istream_iterator<double> eos;              // end-of-stream iterator
  std::istream_iterator<double> iit (std::cin);   // stdin iterator
 
  if (iit!=eos) value1=*iit;
 
  ++iit;
  if (iit!=eos) value2=*iit;
 
  std::cout << value1 << "*" << value2 << "=" << (value1*value2) << '\n';
считывает как и оговорено: 2 числа.
Волшебство? Помогите, пожалуйста.
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
10.08.2013, 23:08     ostream_iterator #5
Цитата Сообщение от gromo Посмотреть сообщение
бесконечно ждет ввода.
Ctrl + Z для завершения
Цитата Сообщение от gromo Посмотреть сообщение
Волшебство?
нет. все как и должно быть. не понятно - читайте документацию
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
10.08.2013, 23:08     ostream_iterator #6
gromo, для Win - CTRL + Z.
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
10.08.2013, 23:25     ostream_iterator #7
Olivеr, это понятно, но если у меня есть еще дальше программа для исполнения, то при CTRL+Z она не выполнится.
Подозреваю, что copy(), возможно, не сдвигает итератор.... Документацию "храню под подушкой", но ничего такого не вычитал. Так в чем же дело??
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
10.08.2013, 23:27     ostream_iterator #8
gromo, ctrl + z устанавливает флаг eof в потоке ввода. Что бы его восстановить:
C++
1
2
copy(istream_iterator<string>(cin),istream_iterator<string>() ,ostream_iterator<string>(cout, " ") );
cin.clear();
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
10.08.2013, 23:37     ostream_iterator #9
Toshkarik, а можно для тупых? В том примере с cplusplus.com я никаких комбинаций не нажимал. Как это было достигнуто?
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
10.08.2013, 23:44     ostream_iterator #10
gromo, Вы там всего 2 раза инкрементируете итератор. В первом же случае это происходит до тех пор, пока итератор не будет равен итератору по умолчанию ( istream_iterator< T >()), а это произойдет при завершении ввода ( ctrl + z ) или ошибки потока.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.08.2013, 00:02     ostream_iterator
Еще ссылки по теме:

C++ Параметр шаблона ostream_iterator по умолчанию
C++ Что значит? ostream_iterator<int>(cout, " ");

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

Или воспользуйтесь поиском по форуму:
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
11.08.2013, 00:02     ostream_iterator #11
Toshkarik, да, это то, что я искал. Благодарю.
Как же стыдно стало( Обычно я люблю разбираться в различных тонкостях стандарта с++, но увы.
Yandex
Объявления
11.08.2013, 00:02     ostream_iterator
Ответ Создать тему
Опции темы

Текущее время: 05:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru