[英]Comparing two result lines generated with fprintf before writing them to file
[英]fprintf not writing “%” to file
因此,我正在尝试将此行写入文本文件;
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”)符号时,该行中的所有内容均已正确写入(有时会写一个,然后转义进行转义的字符,有时不写任何字符)。 tree_as_char中的所有其他符号均已正确写入文件,并且打印该行将正确打印%符号。 也许我没有在某处正确转义?
谢谢!
菲尔
fprintf
将把第二个参数中的任何%
符号都视为格式化程序。 尝试fprintf(fp, "%s", line);
。
哦,亲爱的,只是注意到您正在编写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
字符串中的tree_as_char
不会再有任何问题。 如果您仍然需要该line
var进行其他操作,则可以选择:解析该行,在写入文件指针之前添加辅助%
char,使用fwrite
或 ,更好(也许):使用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
函数打印百分号( %
),则必须转义百分号本身。 只需写%%
就能得到1%:
printf("%d%%", 10);
将打印10%
如果您的tree_as_char
包含百分号,则fprintf
会将其视为占位符,因此您必须首先解析该字符串,并在需要时添加第二个百分号。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.