所以我正在尝试将此行写入文本文件;
sprintf(line, "%d, %f, %f, %f, %f, %f, %f, %f, %f, %f, %d, %s\n",
gen_no, total_time,
progp->total_fitness,
progp->entopy_breakdown[0],
progp->entopy_breakdown[1],
progp->entopy_breakdown[2],
progp->entopy_breakdown[3],
progp->entopy_breakdown[4],
progp->entopy_breakdown[5],
progp->entopy_breakdown[6],
0,
tree_as_char);
fprintf(fp, line);
fclose(fp);
除了tree_as_char中有“%”,即“%25”符号时,行中的所有内容都被正确写入(有时它会写入一个,然后转发进行的char被转义,有时它不会写任何内容)。 tree_as_char中的所有其他符号都正确写入文件,打印行正确打印%符号。也许我在某个地方没有正确地逃脱它?
谢谢!
菲尔
答案 0 :(得分:4)
fprintf
会将第二个参数中的任何%
符号视为格式化程序。试试fprintf(fp, "%s", line);
。
答案 1 :(得分:3)
哦亲爱的,只是注意到你正在写sprintf
,然后然后致电fprintf
。现在这不是必要的。您可以通过以下方式轻松保存sprintf
来电:
fprintf(fp, "%d, %f, %f, %f, %f, %f, %f, %f, %f, %f, %d, %s\n",
gen_no, total_time,
progp->total_fitness,
progp->entopy_breakdown[0],
progp->entopy_breakdown[1],
progp->entopy_breakdown[2],
progp->entopy_breakdown[3],
progp->entopy_breakdown[4],
progp->entopy_breakdown[5],
progp->entopy_breakdown[6],
0,
tree_as_char);
这应该有效,并且tree_as_char
字符串中的百分号不再有任何问题。如果你还需要line
var用于其他事情,你可以选择:解析该行,在写入文件指针之前添加辅助%
字符,使用fwrite
,或< / em>,更好(也许):使用fputs
:
sprintf(line, "%d, %f, %f, %f, %f, %f, %f, %f, %f, %f, %d, %s\n",
gen_no, total_time,
progp->total_fitness,
progp->entopy_breakdown[0],
progp->entopy_breakdown[1],
progp->entopy_breakdown[2],
progp->entopy_breakdown[3],
progp->entopy_breakdown[4],
progp->entopy_breakdown[5],
progp->entopy_breakdown[6],
0,
tree_as_char);
fputs(fp, line);
如果要使用任何%
函数打印百分号(*printf
),则必须转义百分号本身。只需写%%
即可获得一个%:
printf("%d%%", 10);
将打印10%
如果您的tree_as_char
包含百分号,则fprintf
会将其视为占位符,因此您必须首先解析该字符串,并在需要时添加第二个百分号。