printf и scanf



Автор Sonya задал вопрос в разделе Техника

scanf и printf приемущества и недостатки и получил лучший ответ

Ответ от Excelsior[гуру]
В каком смысле преимущества и недостатки? По сравнению друг с другом или по сравнению с другими языковыми средствами?
Если по сравнению друг с другом, то их просто нельзя сравнивать. Это, в определенном смысле, противоположно направленные функции; они дополняют друг друга, а не заменяют. scanf читает данные со стандартного входа и записывает их в заданную строковую переменную в заданном формате. printf, наоборот, выводит данные в заданном формате на стандартный выход.
Если же сравнивать их с другими языковыми средствами, то всё зависит от того, в рамках какого языка мы находимся. Если в С, то альтернативы для scanf и printf нет и ими надо пользоваться. Если же в С++, то ими НЕ НАДО пользоваться, а надо пользоваться гораздо более продвинутыми и удобными stream классами из стандартной библиотеки С++.
[Ага, так бы сразу и написали. Теперь хоть понятно, о чем вопрос. Ну, частично я уже ответил. По сравнению со стримами (как это по-русски? Потоки, что ли? Извините, я программирование по-английски учил) , у scanf и printf нет НИКАКИХ преимуществ. Одни недостатки. В С++ вообще не надо пользоваться функциями с неопределенным числом переменных, ни самодельными, ни библиотечными. Для этой цели в С++ есть гораздо лучшие средства - стримы и вариадические шаблоны. Основная проблема функций с неопределенным числом переменных - это невозможность для компилятора проверить типы передаваемых переменных. Как следствие, компилятор пропустит любое типовое несоответствие, которое он с легкостью ловит при вызовах обычных функций. Кроме того, в случае со scanf и printf, компилятор не может навязать программисту требование того, чтобы число требуемых параметров в форматированной строке соответствовало числу параметров, переданных функции. stream классы устраняют все эти проблемы.]

Ответ от Булат 1[гуру]
scanf и printf никакого отношения к C++ не имеют. Это функции стандартной библиотеки языка C. (Обратите внимание, не самого языка) .
Собственно язык C++ тоже никаких таких функций не имеет - он имеет только стандартную ("входящую в комплект") библиотеку, в которой есть классы. (Обратите внимание: не функции, а классы) .
Их плюсы в том, что создают хорошую защиту от дурака, как, впрочем, и весь язык. Об этом написал Excelsior - произвольные параметры туда не передашь, и есть жесткая типизация.
А вот что касается быстродействия.. . Писал я как-то раз программу, которая выводит в консоль огромное количество данных, практически каждую миллисекунду. printf оказался раз в 8 быстрее. Так что классы потокового буферизованного ввода-вывода C++, скажу я вам, довольно тормознутые. Если вы выводите на экран что-то каждую миллисекунду, то будет тормозить. Но такая необходимость обычно возникает редко, и потоковый ввод-вывод в основном себя оправдывает.
Впрочем, всё зависит от кривизны рук программиста.

Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с похожими вопросами и ответами на Ваш вопрос: scanf и printf приемущества и недостатки
Printf на Википедии
Посмотрите статью на википедии про Printf
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*