2017-01-17 2 views
1

Я должен использовать несоответствующий аргумент в fprintf (спецификатор или, возможно, один из других), потому что мой вывод не имеет смысла.fprintf с целым числом с нулевым значением

// based on http://www.cplusplus.com/reference/cstdio/fprintf/ 
{ 
FILE * pFile; 

int edam7514 = gPlace[7514].damage; 

int fdam4677 = gPlace[4677].damage; 

pFile = fopen("Z:\\Games\\Game_1.8.11.26dev\\SAVE\\debugLog.txt", "a"); 

fprintf(pFile, "edam7514, %.d, fdam4677, %.d\n", edam7514, fdam4677); 

fclose(pFile); 
return 0; 
} 

"gPlace" - это массив структур. В игре несколько тысяч активных. Элементы 7514 и 4677 представляют боевые полки (Столетняя война), и оба имеют поле «повреждения», которое может находиться в диапазоне от 0 до 100.

Этот код используется при испытании артиллерийской бомбардировки английским полком (7514), но а не против французов (4677).

значения во время выполнения fprintf являются: INT edam7514 = 99 INT fdam4677 = 0 (я проверил это, глядя на фактические значения в структурах данных во время отладки)

Тем не менее, Вот что находится в файле, который производится:

edam7514, 99, fdam4677, 

я ожидал:

edam7514, 99, fdam4677, 0 

Думаю, я не отформатировал свои аргументы в вызове функции fprintf правильно?

+0

Почему '% .d'? Ссылка, которую я проверила, предполагает, что за периодом должно следовать число. – usr2564301

+2

Что вы думаете о '% .d'? –

+0

Ключевой вопрос заключается в том, что ваш компилятор _should_ предупредил вас об этом. Убедитесь, что ваш компилятор полностью отключен. Экономит время. – chux

ответ

3

Ожидается выход для этой строки формата. Если вы не хотите этого вывода, вы, вероятно, не должны ставить . между % и d.

. есть без какого-либо целого числа или * после него указует точности значения в 0, что для преобразования спецификатора d, это означает, что никакие символы не будут напечатаны для 0 аргумента.

Если вы когда-либо смущены поведением fprintf, помните, что вы всегда можете просто look it up.

+0

Спасибо, очень полезно! –

-1

Ошибка: вы должны написать %.d вместо %d. Точка используется для десятичного значения, для целого она не имеет смысла. Измените его и будете работать.

+0

Теоретически ''% .3d "' является современной заменой ''% 03d "' - они дают одинаковый результат. Когда использовался ''% .d "', эффект был эквивалентен ''% .0d "', который не был конструктивным, когда напечатанное значение равно 0. –

Смежные вопросы