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

Что применить "\n" или "endl"? - C++

Восстановить пароль Регистрация
 
 
EfimKR
 Аватар для EfimKR
48 / 21 / 10
Регистрация: 24.06.2014
Сообщений: 212
Записей в блоге: 1
06.07.2014, 12:12     Что применить "\n" или "endl"? #1
Эти две операции похожи - они переходят на новую строку. Но endl очищает буфер, но при этом дольше выполняется.
Так что же лучше применять?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.07.2014, 12:12     Что применить "\n" или "endl"?
Посмотрите здесь:

C++ Дан текст, хранящийся в текстовом файле f, каждый символ которого может быть малой буквой, цифрой или одним из знаков "+", "-", "*".
C++ Необработанное исключение в "0x54a2d2e9 (msvcr100d.dll)" в "3.exe": 0xC0000005: Нарушение прав доступа при записи "0xcccccccc".
Что означают команды "fun", "my_max", "my_min" в C++? C++
C++ Необработанное исключение в "0x76f015de" в "контрольная 1 задача 2.exe": 0xC0000005: Нарушение прав доступа при чтении "0x334e2c64"
Необработанное исключение в "0x0fc1d484 (msvcr100d.dll)" в "1.exe": 0xC0000005: Нарушение прав доступа при чтении "0x00aee0af" C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
06.07.2014, 12:18     Что применить "\n" или "endl"? #2
std::endl - для единообразия. Оптимизировать вывод за счет этого - только по указанию профайлера.
dimabubyakin
 Аватар для dimabubyakin
158 / 123 / 44
Регистрация: 16.10.2013
Сообщений: 1,732
Завершенные тесты: 5
06.07.2014, 12:18     Что применить "\n" или "endl"? #3
я предпочитаю endl, тут уж на ваш вкус)
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
06.07.2014, 13:12     Что применить "\n" или "endl"? #4
Если нужно просто вывести многострочный текст, то удобнее написать
C++
1
"one\ntwo\nthree"
чем
C++
1
"one" << endl << "two" << endl << "three"
И, кстати, поток, насколько я знаю, совершенно спокойно может флашнуться и по "\n".
Avazart
 Аватар для Avazart
6904 / 5144 / 253
Регистрация: 10.12.2010
Сообщений: 22,629
Записей в блоге: 17
06.07.2014, 14:06     Что применить "\n" или "endl"? #5
Tulosba, а выглядит удобнее ли ?

Я пишу так
C++
1
2
3
<< "one" << endl 
<< "two" << endl 
<< "three"
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
06.07.2014, 14:12     Что применить "\n" или "endl"? #6
Avazart, могу предложить альтернативный вариант:
C++
1
2
3
<< "one\n"
<< "two\n"
<< "three"
Потому что явно флашить поток наверное все таки не стоит в этом случае.
P.s. Кстати можно и без << во второй, третьей строках.
Muhhekaneok
0 / 0 / 0
Регистрация: 30.06.2014
Сообщений: 1
06.07.2014, 15:14     Что применить "\n" или "endl"? #7
Цитата Сообщение от Tulosba Посмотреть сообщение
флашить поток
Подскажите пожалуйста, что означает данная терминология? Я далеко не программист потому что, поэтому задаю такой вопрос.
Avazart
 Аватар для Avazart
6904 / 5144 / 253
Регистрация: 10.12.2010
Сообщений: 22,629
Записей в блоге: 17
06.07.2014, 15:21     Что применить "\n" или "endl"? #8
Цитата Сообщение от Muhhekaneok Посмотреть сообщение
Подскажите пожалуйста, что означает данная терминология? Я далеко не программист потому что, поэтому задаю такой вопрос.
http://www.cplusplus.com/reference/o...ostream/flush/
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
06.07.2014, 15:23     Что применить "\n" или "endl"? #9
Манипулятор std::endl, помимо того, что добавляет перевод строки в поток, еще и вызывает функцию flush(), которая производит, непосредственно, запись всех еще не записанных данных в поток.
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
06.07.2014, 16:15     Что применить "\n" или "endl"? #10
Да и так должно сработать:
C++
1
2
3
std::cout << "one\n"
             "two\n"
             "three";
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
06.07.2014, 16:16     Что применить "\n" или "endl"? #11
Цитата Сообщение от GuGo1991 Посмотреть сообщение
Да и так должно сработать:
Цитата Сообщение от Tulosba Посмотреть сообщение
Кстати можно и без << во второй, третьей строках.
собственно
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
06.07.2014, 16:21     Что применить "\n" или "endl"? #12
Цитата Сообщение от Tulosba Посмотреть сообщение
P.s. Кстати можно и без << во второй, третьей строках.
Подумал вы не имели ввиду свой вариант
fio
 Аватар для fio
10 / 10 / 3
Регистрация: 16.06.2014
Сообщений: 45
06.07.2014, 16:31     Что применить "\n" или "endl"? #13
endl работает дольше, поэтому его не стоит применять в программах, выводящих много строк и ограниченных по времени выполнения. А ещё набор "\n" требует меньшего количества нажатий на клавиатуре
Впрочем, если речь идёт о скорости, лучше вообще применять сstdio вместо iostream.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
06.07.2014, 18:21     Что применить "\n" или "endl"? #14
C++
1
   (std::cout << "one" << std::cout.widen('\n') << "two" << std::cout.widen('\n') << "three").flush() ;
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
06.07.2014, 19:41     Что применить "\n" или "endl"? #15
Croessmah, какую цель ты преследуешь этим кодом?
C++
1
std::cout.widen('\n')
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
06.07.2014, 19:57     Что применить "\n" или "endl"? #16
Цитата Сообщение от Tulosba Посмотреть сообщение
Croessmah, какую цель ты преследуешь этим кодом?
преобразование к внутреннему представлению, например, если используется нестандартная локаль со своим представлением и своим фацетом ctype. Хотя, наверное, при "\n" тоже будет преобразовано в операторе, но фиг его знает.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
06.07.2014, 21:25     Что применить "\n" или "endl"? #17
Цитата Сообщение от Croessmah Посмотреть сообщение
например, если используется нестандартная локаль со своим представлением и своим фацетом ctype.
Т.е. допускаешь такой вариант, что "\n" при выводе в поток выполнит не перевод строки, а что-то другое?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
06.07.2014, 21:51     Что применить "\n" или "endl"? #18
Цитата Сообщение от Tulosba Посмотреть сообщение
Т.е. допускаешь такой вариант, что "\n" при выводе в поток выполнит не перевод строки, а что-то другое?
Например вот:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <locale>
 
 
class MyFacet : public std::ctype<char>
{
protected:
   char_type do_widen (char c) const {
      return 'X' ;
   }
} ;
 
 
int main() {
   std::cout.imbue ( std::locale ( std::cout.getloc() , new MyFacet ) ) ;
   std::cout << std::cout.widen('\n') ;
   std::cout << '\n' ;
}
учитывается поведение для установленной локали.

Добавлено через 6 минут
Так же и манипулятор endl - выводит с помощью widen интернационализированный символ перевода строки.
Другими словами, widen сделает из переданного символа char символ char_type.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
06.07.2014, 21:55     Что применить "\n" или "endl"? #19
Croessmah, так это из-за widen выводится Х, а не наоборот. "Голая" версия нормально переводит строку и по '\n'.
Кстати, почему-то gcc выводит только один Х:
http://ideone.com/T3f5gS
А студия - два.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.07.2014, 22:22     Что применить "\n" или "endl"?
Еще ссылки по теме:

Написать программу, которая запрашивает у пользователя номер дня недели и выводит одно из сообщений: "Рабочий день","Суббота" или "Воскресенье" C++
C++ я задал произвольный текст длинной 5 строк, и допустим что я ввел 5 раз букву "П" , какой цикл нужно создать чтобы пометять букву "П" на букву "Р" ?
Visual Studio не читает операторы, что начинаются на "glu" ("gluBuild2DMipmaps", "gluPerspective") C++

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

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
06.07.2014, 22:22     Что применить "\n" или "endl"? #20
Цитата Сообщение от Tulosba Посмотреть сообщение
"Голая" версия нормально переводит строку и по '\n'.
"Голая" версия не учитывает моих пожеланий
Цитата Сообщение от Tulosba Посмотреть сообщение
Кстати, почему-то gcc выводит только один Х:
Скорее всего оптимизация при выводе, и используется интервальная версия do_widen:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class MyFacet : public std::ctype<char>
{
public:
   char_type widen ( char c ) const {
      return this->do_widen(c) ;
   }
protected:
   char_type do_widen (char c) const {
      return (c=='\n'?'X':c) ;
   }
   const char* do_widen (const char* low, const char* high, char_type* to) const {
      for ( ; low != high ; ++low , ++to )
      if ( *low == '\n' )
         *to = 'X' ;
      else
         *to = *low ;
      return high ;
   }
} ;
Yandex
Объявления
06.07.2014, 22:22     Что применить "\n" или "endl"?
Ответ Создать тему
Опции темы

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