Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Ввод std::string / 16 сообщений из 16, страница 1 из 1
10.12.2006, 21:35
    #34188745
Slip
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ввод std::string
Не могу разобраться, почему этот код работает не как надо:
Код: plaintext
1.
2.
3.
4.
5.
string s, s1;
getline(cin,s,'\n');
cout<<'\n'<<s;
getline(cin,s1, '\n');
cout<<'\n'<<s1;
В результате сначала выполняются обе getline, а уже потом - вывод. Подскажите пожалуйста, как от этого избавиться.
...
Рейтинг: 0 / 0
10.12.2006, 22:11
    #34188763
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ввод std::string
Дело в буферизации ввода-вывода. Откройте для себя метод flush
...
Рейтинг: 0 / 0
10.12.2006, 22:28
    #34188781
Slip
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ввод std::string
Для кого flush? Для cout не помогает, а для cin его нет...
...
Рейтинг: 0 / 0
10.12.2006, 22:47
    #34188800
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ввод std::string
SlipДля кого flush? Для cout не помогает, а для cin его нет...
Для cout. Перед getline.
...
Рейтинг: 0 / 0
10.12.2006, 22:58
    #34188807
Slip
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ввод std::string
andrey_anonymous SlipДля кого flush? Для cout не помогает, а для cin его нет...
Для cout. Перед getline.
т.е.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
string s, s1;
getline(cin,s, '\n');
cout<<'\n'<<s;
cout.flush();
getline(cin,s1,'\n');
cout<<'\n'<<s1;
cout.flush();
Так не работает(т.е. работает так же, как и без flush)
...
Рейтинг: 0 / 0
10.12.2006, 23:05
    #34188808
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ввод std::string
SlipТак не работает(т.е. работает так же, как и без flush)
т.е. первый вывод не появляется перед вторым getline? Должно работать. Убедитесь, что Вы действительно пересобрали бинарник.
...
Рейтинг: 0 / 0
10.12.2006, 23:09
    #34188810
Slip
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ввод std::string
Кончено пересобрал, но работает так(более подробно):
ввожу строку до enter'a
ввод продолжается...
ввожу еще одну строку до enter'a
ввод заканчивается, выводится первая строка и запрашивается еще один ввод...
ввожу еще одну строку...
ввод заканчивается и выводится вторая строка. Работа программы завершена.
...
Рейтинг: 0 / 0
10.12.2006, 23:40
    #34188830
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ввод std::string
Slipввод заканчивается, выводится первая строка и запрашивается еще один ввод...
Заметьте, это ни с какой стороны не похоже на "сначала выполняются обе getline, а уже потом - вывод". Скорее первый getline не завершается по Enter.
...
Рейтинг: 0 / 0
10.12.2006, 23:43
    #34188833
Slip
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ввод std::string
Нет, это именно выполняются сначала 2 getline, потому что строчка-то вторая выводится та, которая была введена после первого enter'a
...
Рейтинг: 0 / 0
10.12.2006, 23:46
    #34188837
Slip
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ввод std::string
... правда, потом выполняется еще 1 getline... andrey_anonymous, а не могли бы Вы посмотреть, как это работает на вашем компиляторе? А то может это у меня глюки какие пошли...
...
Рейтинг: 0 / 0
11.12.2006, 13:38
    #34190114
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ввод std::string
Код: plaintext
1.
2.
3.
4.
string s, s1;
getline(cin,s,'\n');
cout<<'\n'<<s<<"\nСкока-скока???? Ещё раз.\n";
getline(cin,s1, '\n');
cout<<'\n'<<s1;
чего выведет?
...
Рейтинг: 0 / 0
11.12.2006, 17:10
    #34191047
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ввод std::string
iomainp господа, забудьте про '\n' пишите endl (это с flush) или ends (кжели без него)
...
Рейтинг: 0 / 0
11.12.2006, 19:21
    #34191494
Slip
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ввод std::string
maXmo
Код: plaintext
1.
2.
3.
4.
string s, s1;
getline(cin,s,'\n');
cout<<'\n'<<s<<"\nСкока-скока???? Ещё раз.\n";
getline(cin,s1, '\n');
cout<<'\n'<<s1;
чего выведет?
Сначала просит ввод, ввожу до enter'a, просит сразу же еще ввод, ввожу опять до enter'a, после этого выводит то, что ввел в первый раз, потом "Скока-скока???? Ещё раз.", а потом опять просит ввод.
blindediomainp господа, забудьте про '\n' пишите endl (это с flush) или ends (кжели без него)
Все равно та же фигня...
...
Рейтинг: 0 / 0
11.12.2006, 19:22
    #34191497
Slip
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ввод std::string
Похоже, это глюк Visual Studio 6.0, потому что сегодня скомпилил g++-ом, и все пашет как надо.
...
Рейтинг: 0 / 0
12.12.2006, 11:34
    #34192609
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ввод std::string
попробуй getline(cin,s);
...
Рейтинг: 0 / 0
12.12.2006, 20:10
    #34194629
Slip
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ввод std::string
maXmoпопробуй getline(cin,s);
То же самое, что неудивительно...
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Ввод std::string / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]