2010-09-27 5 views
1

я должен вывести большое количество, двойной точности с помощью следующего кода:Форматирование очень большого числа в C

fprintf(outFile,"   %11.0f %d O(g(n))",factorialNotRecursive(index,factCount),factValue); 

сейчас число становится настолько большим, что он выскакивает из выравнивания далее вниз список вывода. После того, как он достигнет 11 цифр, максимальный указатель продолжает , чтобы увеличить. Есть ли способ справиться с этим? Я не уверен, насколько велики входы , которые будут запущены в этой программе.

+3

Ум, измените '% 11.0f' на нечто большее, например'% 20.0f'? –

+1

Да, зная пределы ввода, вы помогли бы ответить на этот вопрос ... ;-) – pascal

+0

Спасибо за советы, я выполняю задание на класс, и наш профессор переводит нас на c c C++, которые мы узнали на вступительных курсах. Опять же, спасибо! – 2010-09-27 22:12:53

ответ

1

Думаю, вы не можете сделать это напрямую. Вы должны напечатать строку, а затем изменить строку.

/* pseudo (untested) code */ 

value = factorialNotRecursive(index, factCount); 
/* make sure buff is large enough (or use snprintf if available) */ 
n = sprintf(buff, "%11.0f", value); 
if (n > 11) { 
    buff[10] = '+'; 
    buff[11] = 0; 
} 
fprintf(outFile,"   %s %d O(g(n))", buff, factValue); 
+0

Вау, приятно знать, спасибо! – 2010-09-27 22:13:29

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