Как использовать строковый формат, например printf, при сохранении в файл?

Я пытаюсь сохранить некоторые переменные double в файл, но я бы хотел, чтобы они сохранялись только с двумя десятичными знаками. Если бы я собирался распечатать их на терминале, я бы сделал это:

printf ("var1: %.2f var2: %.2f\n", var1, var2);

Я хотел бы знать, есть ли эквивалент, но для использования при записи в файл с fstream.

Я знаю, что в Java вы можете использовать PrintWriter для чего-то подобного, но есть ли эквивалент C++?

Кроме того, я знаю, что здесь я делаю двойное погружение, но если бы я также мог получить эквивалент Java FileWriter для C++, это было бы здорово, потому что моя программа перезаписывает содержимое моего файла, а не добавляется к нему.


person lokilindo    schedule 14.02.2016    source источник
comment
Что такое fprint? Стандартная библиотека C предоставляет fprintf, который также доступен в C++. И если вы знаете, как использовать std::cout, вы можете сделать то же самое с std::ofstream для записи в файл.   -  person 5gon12eder    schedule 14.02.2016
comment
откройте файл с помощью fopen и используйте fprintf вместо printf   -  person M.M    schedule 14.02.2016
comment
в c++ вы захотите использовать std::ofstream и форматированные операторы вставки и манипуляторы ввода-вывода. см. ‹fstream› и ‹iomanip›   -  person 2785528    schedule 14.02.2016
comment
Я только начинаю использовать С++, и я не очень хорошо знаю синтаксис, некоторые примеры кода будут оценены.   -  person lokilindo    schedule 14.02.2016
comment
@ 5gon12eder Я знаю, что могу использовать ofstream, но я не просто хочу писать в файл, я также хотел бы форматировать строку.   -  person lokilindo    schedule 14.02.2016
comment
Для форматирования строки вы можете использовать std::ostringstream или std::snprintf. Но, пожалуйста, будьте конкретны и ограничьтесь одним вопросом за раз. Ваш первоначальный вопрос касался вывода файла.   -  person 5gon12eder    schedule 14.02.2016
comment
Посмотрите ответы stackoverflow.com/questions/15106102/ и stackoverflow.com/questions/18263461/ Также есть некоторая информация horstmann. com/cpp/iostreams.html и flipcode.com/archives/ostream_printf.shtml и boost.org/doc/libs/ 1_58_0/libs/format/doc/format.html   -  person Jerry Jeremiah    schedule 17.02.2016


Ответы (2)


Если вы пишете свой файл в стиле C (используя FILE*), вы можете использовать fprintf().

Для вывода ostream в стиле C++ такое форматирование выполняется с помощью манипуляторов потока:

out << "var1: " << std::fixed << std::setprecision(2) << var1 << " var2: " << var2;

Иногда это неудобно (например, когда формат зависит от языка, и вам нужно получить его из файла перевода).

person Toby Speight    schedule 17.02.2016

Вы можете использовать snprintf для форматирования строки в памяти, а затем записать ее в ofstream через <<.

person StilesCrisis    schedule 14.02.2016