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 приемущества и недостатки
спросили в Ругайи
Почему не работают операторы cin и cout в visual studio 8.Пример программы дальше
Во-первых, не слушайте безграмотных советов по поводу написания <iostream.h>. Все имена
подробнее...

Решил вспомнить С++.
Видимо, с тех пор, как вы его забыли, С++ успел немного поменяться, попробуйте:

#include
подробнее...
спросили в Stdio h
Найти простые делители натурального числа. с++
#include <stdio.h>

int main() {
    int n, p;
   
подробнее...
спросили в Stdio h
Помогите пожалуйста найти ошибку в коде.
Исправьте printf в двух местах:

#include <stdio.h>

int main()
{
подробнее...
спросили в Stdio h Stdlib h
Динамический массив в Си
Операция new для языка C++, а в Си требуется такая конструкция при выделении памяти:подробнее...
Ответ от 3 ответа[гуру]
Привет! Вот еще темы с похожими вопросами:
спросили в Stdio h Stdlib h
Программирование. Одномерные массивы в си.
"я ни черта не понял на лекции" Совершенно нормально. Лекции служат только для того, чтобы понять,
подробнее...
спросили в Stdio h
Си. scanf(). не пойму почему не считываются значения. Подскажите, пожалуйста.
Проверьте соответствие форматной строки и типов данных, посмотрите настройки локали, обратите
подробнее...

как с помощью printf вывести double???
%f, если конкретно double, то %Lg
? ?
Просветленный
(38603)
Ну так %f
подробнее...
спросили в Прато
Чем отличаются функции "cout" и "printf" в С++ ?И какие еще вы знаете функции для С++ Developer????
Вообще-то printf - функция, а cout - объект. Так что если параллели проводить между С и C++, топодробнее...
спросили в Евгений IV
что означает знак процента "%" в си++ ?
Смотря где стоит. . если в printf, то отвечает за форматирование.
При остальных операциях -
подробнее...
Printf на Википедии
Посмотрите статью на википедии про Printf
 

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

Имя*

E-mail:*

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