Как использовать кавычки в fstream?

Я хочу вывести строку в .plt файл, который говорит "one-D Hydro" с двойными кавычками, и до сих пор у меня есть эта проблема.

#include <cstdlib>
#include <fstream>

using namespace std;

int main()
{
        fstream gnuplot_file;        

        gnuplot_file.open ("sod.plt");
        gnuplot_file<<"set title"<< ""one-D Hydro""<<std::endl;
        gnuplot_file.close();
        system("gnuplot.exe sod.plt");


        return 0;
}

Строка 11 не позволит ей скомпилироваться, потому что я не могу закрыть утверждение. Кстати, ошибка такая же бесполезная.

gnuplot_call.cpp|11|error: expected ';' before 'one'|

2 ответа

Решение

В C++03 (или даже C) используйте обратную косую черту, чтобы избежать двойных кавычек в строковых литералах:

    gnuplot_file << "set title" << "\"one-D Hydro\"" << std::endl;

Заметить, что gnuplot может потребовать от вас также экранировать некоторые символы, например, если вы хотите, чтобы заголовок содержал кавычки!

С C++ 11 вы можете использовать необработанные строковые литералы, например

   gnuplot_file<< R"*(set title "one-D Hydro")*" << std::endl;

Кстати, вас могут заинтересовать popen(3) и pclose, если ваша операционная система и библиотека C++ предоставляют их. Вы бы просто popen gnuplot обрабатывать и отправлять ему команды, наконец pclose это

Попробуйте включить escape-символ [т.е. косую черту] в код, в который вы пытаетесь добавить двойные кавычки. Например:

"\"one-D Hydro\""

кстати почему вы используете std:: как только вы определили пространство имен для него, вы можете напрямую использовать endl.

Другие вопросы по тегам