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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
EfimKR
53 / 26 / 10
Регистрация: 24.06.2014
Сообщений: 229
Записей в блоге: 1
#1

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

06.07.2014, 12:12. Просмотров 1334. Ответов 24
Метки нет (Все метки)

Эти две операции похожи - они переходят на новую строку. Но endl очищает буфер, но при этом дольше выполняется.
Так что же лучше применять?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.07.2014, 12:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Что применить "\n" или "endl"? (C++):

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно". Я так...

Вставить пробел после каждого символа "." "," "!" или "?", если за этими символами не следует пробел - C++
Вставить пробел после каждого символа "." "," "!" или "?", если за этими символами не следует пробел (т. е. следует любой символ, кроме...

Реализовать классы "Воин", "Пехотинец", "Винтовка", "Матрос", "Кортик" (наследование) - C++
Разработать программу с использованием наследования классов, реализующую классы: − воин; − пехотинец(винтовка); − матрос(кортик). ...

С++ консольное приложение win32, матерится на первое "pow" после "if", а на "system" говорит что неопределён. - C++
#define _CRT_SECURE_NO_WARNINGS #include "stdafx.h" #include <math.h> #include <iostream> #define Pi 3.1416 #include <clocale>...

Visual Studio не читает операторы, что начинаются на "glu" ("gluBuild2DMipmaps", "gluPerspective") - C++
Данный код должен выводить на экран кубик который должен вращаться, но возникла проблема. Для выполнения этого кода я подключи библиотеку...

Что Вы понимаете под "абстрактным типом", "абстракцией данных" и "абстрактными операциями"? - C++
А давайте займёмся археологией! И проследим как менялся смысл понятий "абстрактный тип данных", "абстракция данных" и "абстрактные...

24
Croessmah
Эксперт CЭксперт С++
13501 / 7658 / 865
Регистрация: 27.09.2012
Сообщений: 18,844
Записей в блоге: 3
Завершенные тесты: 1
06.07.2014, 19:57 #16
Цитата Сообщение от Tulosba Посмотреть сообщение
Croessmah, какую цель ты преследуешь этим кодом?
преобразование к внутреннему представлению, например, если используется нестандартная локаль со своим представлением и своим фацетом ctype. Хотя, наверное, при "\n" тоже будет преобразовано в операторе, но фиг его знает.
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
06.07.2014, 21:25 #17
Цитата Сообщение от Croessmah Посмотреть сообщение
например, если используется нестандартная локаль со своим представлением и своим фацетом ctype.
Т.е. допускаешь такой вариант, что "\n" при выводе в поток выполнит не перевод строки, а что-то другое?
0
Croessmah
Эксперт CЭксперт С++
13501 / 7658 / 865
Регистрация: 27.09.2012
Сообщений: 18,844
Записей в блоге: 3
Завершенные тесты: 1
06.07.2014, 21:51 #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.
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
06.07.2014, 21:55 #19
Croessmah, так это из-за widen выводится Х, а не наоборот. "Голая" версия нормально переводит строку и по '\n'.
Кстати, почему-то gcc выводит только один Х:
http://ideone.com/T3f5gS
А студия - два.
0
Croessmah
Эксперт CЭксперт С++
13501 / 7658 / 865
Регистрация: 27.09.2012
Сообщений: 18,844
Записей в блоге: 3
Завершенные тесты: 1
06.07.2014, 22:22 #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 ;
   }
} ;
2
Tuma
60 / 41 / 18
Регистрация: 28.09.2013
Сообщений: 193
06.07.2014, 22:30 #21
EfimKR, так endl применяется там,где нельзя применить \n,например при выводе чисел.
0
Croessmah
Эксперт CЭксперт С++
13501 / 7658 / 865
Регистрация: 27.09.2012
Сообщений: 18,844
Записей в блоге: 3
Завершенные тесты: 1
06.07.2014, 22:36 #22
Цитата Сообщение от Tuma Посмотреть сообщение
так endl применяется там,где нельзя применить \n,например при выводе чисел.
C++
1
std::cout << 5 << '\n' << 6 << std::endl ;
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
06.07.2014, 22:37 #23
Цитата Сообщение от Croessmah Посмотреть сообщение
"Голая" версия не учитывает моих пожеланий
Это которых пожеланий?
0
Tuma
60 / 41 / 18
Регистрация: 28.09.2013
Сообщений: 193
06.07.2014, 22:49 #24
Croessmah, и что?это понятно,что при работе с числами можно запихнуть символ,но зачем?
0
Croessmah
Эксперт CЭксперт С++
13501 / 7658 / 865
Регистрация: 27.09.2012
Сообщений: 18,844
Записей в блоге: 3
Завершенные тесты: 1
06.07.2014, 23:09 #25
Цитата Сообщение от Tuma Посмотреть сообщение
и что?это понятно,что при работе с числами можно запихнуть символ,но зачем?
чтобы каждый раз буфер не сбрасывать...
Цитата Сообщение от Tulosba Посмотреть сообщение
Это которых пожеланий?
для кодировки потока

вот пример: http://ideone.com/jOH5Us
0
06.07.2014, 23:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.07.2014, 23:09
Привет! Вот еще темы с ответами:

Написать программу, которая запрашивает у пользователя номер дня недели и выводит одно из сообщений: "Рабочий день","Суббота" или "Воскресенье" - C++
Написать программу, которая запрашивает у пользователя номер дня недели и выводит одно из сообщений: &quot;Рабочий день&quot;,&quot;Суббота&quot; или...

Дан текст, хранящийся в текстовом файле f, каждый символ которого может быть малой буквой, цифрой или одним из знаков "+", "-", "*". - C++
Дан текст, хранящийся в текстовом файле f, каждый символ которого может быть малой буквой, цифрой или одним из знаков &quot;+&quot;, &quot;-&quot;, &quot;*&quot;. Групой...

Определить, какая из точек "В" или "С" расположены ближе к точке "А". - C++
На оси Ох расположены 3 точки А, В и С. Определить, какая из точек &quot;В&quot; или &quot;С&quot; расположены ближе к точке &quot;А&quot;. Предусмотреть вариант...

Создать абстрактный класс "Издание" и производные классы "Книга", "Статья", "Электронный ресурс" - C++
1. Создать абстрактный класс Издание с методами, позволяющими вывести на экран информацию об издании, а также определить является ли данное...


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

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru