Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Оператор вывода 
:(
    Опции темы
pappyly
Дата 23.2.2011, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 23.2.2011

Репутация: нет
Всего: нет



Всем привет, я только начал изучать С++, и столкнулся с оператором вывода, точнее с двумя:
printf и cout, в чем разница и какой лучше если есть разница...
PM MAIL   Вверх
Фантом
Дата 23.2.2011, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 4
Всего: 49



Первый - стандартная функция форматного вывода для C (имеющийся и в C++), второй - поток вывода для C++. В С++ идеологически правильнее, пожалуй, использовать cout, но можно и оба - как больше нравится.
PM   Вверх
KaraKum
Дата 23.2.2011, 13:13 (ссылка)  | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 640
Регистрация: 3.12.2007

Репутация: нет
Всего: 1



Вдобавок к этому, printf() потоко-безопасная функция, а std::cout нет, например если из двух параллельно работающих потоков написать строки "помиловать" и "нельзя казнить" с помощью printf(), то гарантированно так и получится:
Цитата

помиловать
нельзя казнить

но если посредством std::cout, то может получиться, например, так:
Цитата

помиловать нельзя

казнить

потому что, в этом случае, пока выводилась первая строка ("помиловать"), то в это время втиснулась строка "нельзя казнить" между словом "помиловать" и символом конца строки, после чего дописался символ конца строки из "помиловать" (получилась пустая строка между ними) и дальше остатки строки "нельзя казнить".  smile 

Это сообщение отредактировал(а) KaraKum - 23.2.2011, 13:15
PM MAIL WWW   Вверх
pappyly
Дата 23.2.2011, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 23.2.2011

Репутация: нет
Всего: нет



всем спасибо за понятные ответы, я все уяснил.
PM MAIL   Вверх
kemiisto
Дата 23.2.2011, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 5
Всего: 160



Цитата(KaraKum @  23.2.2011,  11:13 Найти цитируемый пост)
Вдобавок к этому, printf() потоко-безопасная функция, а std::cout нет

Во-первых, тут надо определить, что подразумевается под потоко-безопасностью.
Во-вторых, насколько я знаю, вы запостили откровенную чушь. Стандарт ни С, ни C++ не специфицируют потоко-безопасность этих функций (что бы вы под ней не понимали). Так что здесь классичсекий случай depends on implementation.


--------------------
PM MAIL WWW GTalk Jabber   Вверх
volatile
Дата 24.2.2011, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 16
Всего: 85



Цитата(KaraKum @  23.2.2011,  13:13 Найти цитируемый пост)
то может получиться, например, так:
помиловать нельзя

казнить

Это еще хорошо. Я когда баловался с выводом в cout с разных потоков получал что-то вроде:
Цитата

понельмилозя казватьнить
 smile 
PM MAIL   Вверх
alexvs11
Дата 24.2.2011, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


hell is here
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 21.8.2010

Репутация: 2
Всего: 10



Цитата(kemiisto @  23.2.2011,  13:59 Найти цитируемый пост)
Так что здесь классичсекий случай depends on implementation.

поэтому трассировки обычно делают в блокировках

потоки это хорошо, но printf/sprintf не заменят в случаях, когда это удобней потоковых вариантов (речь о std::cout, std::stringstream)
имхо манипуляторы не самая удобная вещь smile 
а вот файловые потоки c++ по сравнению с сишными FILE много удобнее

Добавлено через 1 минуту и 36 секунд
ну и да, это не операторы
первый функция, а второй глобальный объект std::ostream

Это сообщение отредактировал(а) alexvs11 - 24.2.2011, 00:16
PM MAIL   Вверх
mes
Дата 24.2.2011, 00:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(alexvs11 @  23.2.2011,  23:15 Найти цитируемый пост)
но printf/sprintf не заменят в случаях, когда это удобней потоковых вариантов

во первых printf подходит только для плоских типов..  к тому же он потенциально опасен в С++-контексте.. 
во вторых для случаев когда требуется отформатировать по шаблону существует  другие инструменты, например 
boost.format..

Добавлено через 3 минуты и 23 секунды
Цитата(alexvs11 @  23.2.2011,  23:15 Найти цитируемый пост)
 это не операторы

там не говорилось, что это операторы языка.. это не внутриязыковое понятие.. под "оператороми вывода" подразумеваются любые средства языка, непосредственно позволяющие этот вывод осуществить..



--------------------
PM MAIL WWW   Вверх
alexvs11
Дата 24.2.2011, 01:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


hell is here
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 21.8.2010

Репутация: 2
Всего: 10



Цитата(mes @  24.2.2011,  00:33 Найти цитируемый пост)
во первых printf подходит только для плоских типов..

подразумевается поддержка operator<< и неявного приведения? в большинстве случаев их использование - сомнительный ход
Цитата(mes @  24.2.2011,  00:33 Найти цитируемый пост)
к тому же он потенциально опасен в С++-контексте.. 

существует синхронизация потоков стандартной библиотеки и ++ых потоков, ну и sscanf, sprintf разве чем-то опасны?

Цитата(mes @  24.2.2011,  00:33 Найти цитируемый пост)
во вторых для случаев когда требуется отформатировать по шаблону существует  другие инструменты, например boost.format..

буст хорошо, но внешняя зависимость же, не все воля программиста

Цитата(mes @  24.2.2011,  00:33 Найти цитируемый пост)
там не говорилось, что это операторы языка.. это не внутриязыковое понятие.. под "оператороми вывода" подразумеваются любые средства языка, непосредственно позволяющие этот вывод осуществить..

очень широкий взгляд на понятие оператора, как для программировании (операторы с точки зрения грамматики), так и для математики
PM MAIL   Вверх
mes
Дата 24.2.2011, 01:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(alexvs11 @  24.2.2011,  00:03 Найти цитируемый пост)
очень широкий взгляд на понятие оператора, как для программировании (операторы с точки зрения грамматики), так и для математики 

изначально значение слова оператор было несколько другое... 
Цитата

Оператор – это элемент языка, который задает полное описание некоторого действия, которое необходимо выполнить. 
Оператор - это наиболее крупное и содержательное понятие языка: каждый оператор представляет собой законченную фразу языка программирования и определяет некоторый вполне законченный этап обработки данных. 
В состав операторов входят ключевые слова; данные; выражения и т.д.


Добавлено @ 01:30
Цитата(alexvs11 @  24.2.2011,  00:03 Найти цитируемый пост)
подразумевается поддержка operator<< и неявного приведения?

smile
Цитата(alexvs11 @  24.2.2011,  00:03 Найти цитируемый пост)
существует синхронизация потоков стандартной библиотеки и ++ых потоков,

при чем тут это ?  smile 

имелась ввиду "неадекватность" применения эллипсисных функций к объектам С++.

Это сообщение отредактировал(а) mes - 24.2.2011, 01:34


--------------------
PM MAIL WWW   Вверх
pappyly
Дата 24.2.2011, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 23.2.2011

Репутация: нет
Всего: нет



Народ, народ вы слегка оторвались от темы, и не забывайте вы все это объясняете мне - новичку, которому не очень понятны ваши заумные фразы, я ведь только начал изучать язык; пожалуйста можно как-нибудь по проще?
PM MAIL   Вверх
kemiisto
Дата 24.2.2011, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 5
Всего: 160



Использую std::cout.


--------------------
PM MAIL WWW GTalk Jabber   Вверх
Modul
Дата 24.2.2011, 14:51 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 17.2.2006

Репутация: нет
Всего: нет



Код

#include <iostream>

int main()
{
    std::cout << "Hello world !" << std::endl;
    return 0;
}


--------------------
I'll be back !
PM MAIL   Вверх
mes
Дата 24.2.2011, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



printf и компания - подходят только для простых стандартных типов и нужны фактически только при программировании в с-стиле..






--------------------
PM MAIL WWW   Вверх
Modul
Дата 24.2.2011, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 17.2.2006

Репутация: нет
Всего: нет



Дядьки в своих материях ...

Ну как ? Получилось ?
--------------------
I'll be back !
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0592 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.