将格式化文本写入文件 - C ++

时间:2016-07-15 14:08:26

标签: c++ io

我有这段代码:

        printf("GPU: %ic  SYSTEM: %ic  CPU: %ic  HDD: %ic  ",temp[0],temp[1],temp[2],temp[7]);
        ofstream temp_file;
        temp_file.open("D:\\localhost\\xampp\\htdocs\\monitor\\temps.json");
        temp_file << fprintf("\"{\"GPU\": [%ic], \"System\": [%ic], \"CPU\": [%ic], \"HDD\": [%ic]}\"", temp[0],temp[1],temp[2],temp[7]);
        temp_file.flush();
        temp_file.close();

我得到错误“无法将'const char *'转换为'FILE * {aka _iobuf *}'以将参数'1'转换为'int fprintf(FILE *,const char *,...)'

temp变量是一个int,代码的第一行确实打印出格式化文本。如何将该文本推送到文件?

4 个答案:

答案 0 :(得分:1)

使用boost::format

cout << boost::format("\"{\"GPU\": [%1%], \"System\": [%2%], \"CPU\": [%3%], \"HDD\": [%4%]}\"") % temp[0] % temp[1] % temp[2] % temp[3]; 

答案 1 :(得分:1)

您滥用fprintf()

fprintf()会返回int,并希望其第一个参数为FILE *per the documentation

int fprintf(FILE *restrict stream, const char *restrict format, ...);

如果这是您想要采用的路线,您需要先使用s[n]printf()格式化文本 - 制作C风格的字符串并将其写入C ++ ofstream

char buffer[ BUF_SIZE ];
snprintf( buffer, sizeof( buffer ),
    "\"{\"GPU\": [%ic], \"System\": [%ic], \"CPU\": [%ic], \"HDD\": [%ic]}\"",
    temp[0], temp[1], temp[2], temp[7] );

...

temp_file << buffer;

...

还有许多其他方法可以在C ++中格式化输出。

答案 2 :(得分:0)

temp_file << fprintf("\"{\"GPU\": [%ic], \"System\": [%ic], \"CPU\": [%ic], \"HDD\": [%ic]}\"", temp[0],temp[1],temp[2],temp[7]);错了。您无法合并ofstreamfprintf - 使用其中一种。

要将格式化输出写入您使用io manipulators的流,并且您不需要执行任何特殊操作来输出整数,字符串,双精度等。

答案 3 :(得分:0)

fprintf的第一个参数必须是指向标识流而不是temp [0](GPU)的FILE对象的指针。

C库函数int fprintf(FILE * stream,const char * format,...)将格式化输出发送到流。