繁体   English   中英

fprintf未将“%”写入文件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM