Поэтому я пытаюсь записать эту строку в текстовый файл;
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
. Теперь это просто не нужно. Вы можете легко сэкономить на этом вызове 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 для других вещей, вы можете выбрать: проанализировать строку, добавить вторичные символы %
до записи в указатель файла, использовать 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
, вам нужно избежать самого знака процента. Просто напишите %%
чтобы получить один%:
printf("%d%%", 10);
будет печатать 10%
Если ваш tree_as_char
содержит знаки процента, fprintf
просто рассмотрит это как заполнитель, так что вам придется сначала разобрать эту строку и добавить второй знак процента, если это необходимо.
f
вsprintf
иfprintf
?