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

cin cout и fscan fprintf - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 34, средняя оценка - 4.91
Staier
0 / 0 / 0
Регистрация: 04.10.2009
Сообщений: 5
14.07.2010, 19:45     cin cout и fscan fprintf #1
Здравствуйте!
Помогите понять чем они отличаются. учили в школе както через фсканф и фпринтф хотел разобраться с cin и сout. в fscanf понятно что подключаешь файл через fopen или freopen и дальше юзаешь его при чтении/выводе. а как быть с cin cout?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.07.2010, 19:45     cin cout и fscan fprintf
Посмотрите здесь:

Не работают cin и cout C++
cin cout C++
Cin и cout не компилируется C++
C++ перезагрузка cin, cout
C++ операторы cin, cout
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
14.07.2010, 20:06     cin cout и fscan fprintf #2
Цитата Сообщение от Staier Посмотреть сообщение
фсканф и фпринтф
Если пишешь на C++ - забудь о них, это наследие Си.
Цитата Сообщение от Staier Посмотреть сообщение
cin cout
Данные потоки предназначены для работы с консолью.
Для работы с файлами используй ifstream и ofstream.
alex_x_x
14.07.2010, 22:11
  #3

Не по теме:

Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Если пишешь на C++ - забудь о них, это наследие Си.
ладно уж, часто проще ними, чем нагромождать манипуляторами и прочим

CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
14.07.2010, 22:50     cin cout и fscan fprintf #4
Цитата Сообщение от alex_x_x Посмотреть сообщение
ладно уж, часто проще ними, чем нагромождать манипуляторами и прочим
Простота не должна быть в ущерб безопастности.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
14.07.2010, 22:58     cin cout и fscan fprintf #5
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Простота не должна быть в ущерб безопастности.
Ну это в первую очередь от рук программиста зависит. Можно и с printf()/scanf() всё кошерно сделать, а можно и с cin/cout такой блудняк устроить, что сам чёрт не разберёт...

Цитата Сообщение от Staier Посмотреть сообщение
Помогите понять чем они отличаются.
printf()/scanf() - функции языка С для работы с потоками ввода/вывода. В С++ работа с потоками ввода/вывода основана на классах, соответственно cin - класс потока ввода, cout - вывода.
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
14.07.2010, 23:07     cin cout и fscan fprintf #6
Цитата Сообщение от easybudda Посмотреть сообщение
Ну это в первую очередь от рук программиста зависит. Можно и с printf()/scanf() всё кошерно сделать, а можно и с cin/cout такой блудняк устроить, что сам чёрт не разберёт...
Руки, конечно, руками, но printf с его эллипсисом и полностью отсутсвующей проверкой типов слишком благоприятная среда для ошибок, чтобы его использовать в C++. Даже при наличии прямых рук, растущих из правильного места.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
14.07.2010, 23:24     cin cout и fscan fprintf #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
#define DEBUG
 
#ifdef DEBUG
#define DBG_MSG( fmt, ... ) \
            printf( "<DBG>%s (%d) %s: "fmt"\n", \
            __FILE__, __LINE__,__FUNCTION__,__VA_ARGS__  ); 
#else
            #define DBG_MSG( fmt, ... )
#endif
 
int main(){
  DBG_MSG( "%d", 20 );
  return 0;
}
ну перепишите с cout'ом
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
14.07.2010, 23:29     cin cout и fscan fprintf #8
Цитата Сообщение от alex_x_x Посмотреть сообщение
ну перепишите с cout'ом
И что это мне даст?
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
14.07.2010, 23:30     cin cout и fscan fprintf #9
ничего, а что мне даст идейный отказ от неверного printf?
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
14.07.2010, 23:31     cin cout и fscan fprintf #10
Цитата Сообщение от alex_x_x Посмотреть сообщение
ничего, а что мне даст идейный отказ от неверного printf?
Безопастность. Или удобство превыше всего?
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
14.07.2010, 23:32     cin cout и fscan fprintf #11
одному без другого плохо скорее
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
14.07.2010, 23:34     cin cout и fscan fprintf #12
Цитата Сообщение от alex_x_x Посмотреть сообщение
одному без другого плохо скорее
Вот стандарт новый выйдет и благодаря шаблонам с переменным числом аргументов будет и удобство и безопастность.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16821 / 5242 / 318
Регистрация: 30.03.2009
Сообщений: 14,118
Записей в блоге: 26
14.07.2010, 23:47     cin cout и fscan fprintf #13
Может дело в привычке, но когда гляжу на printf из 12 аргументов, то хотя бы понятно, что получу в результате. Глядя на cout как-то пространственного воображения не всегда хватает понять, что получится в результате

Добавлено через 2 минуты
Более того, есть функции типа vsprintf или vfprintf (грубо говоря всё то, что в качестве параметра умеет принимать va_list). В Си++ что-то такого не видел нигде
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
14.07.2010, 23:53     cin cout и fscan fprintf #14
Цитата Сообщение от Evg Посмотреть сообщение
Более того, есть функции типа vsprintf или vfprintf (грубо говоря всё то, что в качестве параметра умеет принимать va_list). В Си++ что-то такого не видел нигде
Есть аналоги потоков ввода/вывода для работы со строками: istringstream, ostringstream, stringstream.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16821 / 5242 / 318
Регистрация: 30.03.2009
Сообщений: 14,118
Записей в блоге: 26
14.07.2010, 23:55     cin cout и fscan fprintf #15
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Есть аналоги потоков ввода/вывода для работы со строками: istringstream, ostringstream, stringstream.
А можешь привести пример, как этим хозяйством пользоваться?
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
15.07.2010, 00:01     cin cout и fscan fprintf #16
Evg, точно также как cout'ом:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <sstream>
 
int main() {
  std::ostringstream stream;
 
  stream << 1.0 << " string " << 98 << std::endl;
 
  std::cout << stream.str() << std::endl;
 
  return 0;
}
Это конечно не vsprintf, но хоть что-то.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16821 / 5242 / 318
Регистрация: 30.03.2009
Сообщений: 14,118
Записей в блоге: 26
15.07.2010, 00:04     cin cout и fscan fprintf #17
Например, я использую функцию отладочной печати, которая настраивается некой величиной отладочного уровня, начиная с которого надо печатать. А само значение отладочного уровня - это некая глобальная переменная, которая в процессе работы может меняться. Условно говоря, что-то типа этого.

C
1
2
3
4
5
6
7
8
9
10
void
DebugPrint (int level, const char *format, ...)
{
  if (level < cur_level)
    return;
 
  va_list va;
  va_start (va, format);
  vfprintf (stderr, format, va);
}
В итоге все отладочные печати выглядят почти как printf'ы (только появляется дополнительный первый параметр). Как что-то подобное написать на Си++, чтобы точки вызова отладочной печати внешне выглядели почти как работа с cout'ом?

Добавлено через 56 секунд
Твой пример - это немного не то, что мне хочется (если я правильно его понял)
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
15.07.2010, 00:16     cin cout и fscan fprintf #18
Evg, хороший вопрос. К сожалению, ничего подобного vsprintf в C++ пока нет. Поэтому твой пример на C++ по челевечески не написать.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16821 / 5242 / 318
Регистрация: 30.03.2009
Сообщений: 14,118
Записей в блоге: 26
15.07.2010, 00:26     cin cout и fscan fprintf #19
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Поэтому твой пример на C++ по челевечески не аписать.
Вот и я про что. Все эти потуги академического программирования хороши лишь до поры до времени. В какой-то момент сталкиваешься с тем, что работать только на высоком уровне не всегда получается. Потому я в своё время и невзлюбил Си++ (т.е. это был чисто эмоциональный шаг). Сейчас потихоньку осваиваюсь, но постоянно ощущаю, что из-за слишком высокого уровня многое получается через ж...у

Добавлено через 1 минуту
Да, началось то всё с чего. Именно поэтому лично для меня вопрос cout vs printf далеко не однозначен. Пока я пользуюсь исключительно printf'ами
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.07.2010, 00:53     cin cout и fscan fprintf
Еще ссылки по теме:

C++ Ошибка на cout и cin
C++ Cin cout
C++ Добавить cin и cout

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

Или воспользуйтесь поиском по форуму:
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
15.07.2010, 00:53     cin cout и fscan fprintf #20
Evg, есть подвижки к более безопасной замене эллепсиса. Новый стандарт, а именно шаблоны с переменным числом аргументов позволит реализовать безопасные к типам printf-подобные функции. Тогда думаю таких заморочек не будет.
Yandex
Объявления
15.07.2010, 00:53     cin cout и fscan fprintf
Ответ Создать тему
Опции темы

Текущее время: 22:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru