Программисты С/С++, объясните есть ли отличия в операторах ввода/вывода (cin/cout от printf/scanf)
cin и cout это стандартные потоки ввода вывода, которые используются при написании программ на С++ для ввода вывода информации
printf и scanf это функции, которые служат для ввода/вывода на консоль в программах на языке С.
Так как С++ поддерживает С (в большинстве случаев) , то и поддерживает эти функции, но лучше в программах на С++ их не использовать
Отличия есть и чтобы их описать не хватит рабочего дня.
В кратце:
- cin, cout, cerr - ОБЪЕКТЫ. а printf, scanf - функции
- printf, scanf атомарно работают в многопоточном приложении, а cin, cout cerr - нет.
- printf, scanf подвержены ошибке неправильного формата аргументов, что чревато труднообнаружимым сегфолтом. cin, cout - нет.
- можно перегрузить ввод-вывод для своей структуры данных и использовать одинаковый синтаксис для ввода-вывода с cin и cout... В printf и scanf поддерживаются только встроенные типы.
Итог: cin и cout выглядят красиво и современно, но сделаны внутри криво и косо.
printf и scanf выглядят устаревшими, но как правило, их использование не вызывает больших проблем или неудобств.
глобальный вопрос.. . конечно есть, в двух словах не объяснишь, cin\сout ориентируются на потоки данных и это свойственно C++, printf - это обычный си, совсем разный синтаксис и поведение, потоки умеет "умно" работать с разными типами данных, а вот основная проблема printf
char * s = "bla-bla-ba";
int num = 10;
printf("%s %d", num, str);