2015-09-01 3 views
-9

Я столкнулся с этим фрагментом, но не мог понять, как он работает, особенно инструкции printf. Может кто-то объяснитьТочки в printf в C++

void remove_trailing_zeroes() 
{ 
    int a,b; 
    bool f1,f2; 
    f1=a%2; 
    f2=b%2; 
    if (f1==f2) { 
     printf("%.0lf\n",(a*1.+b)/2.); 
    } 
    else { 
     printf("%.1lf\n",(a*1.+b)/2.); 
    } 

} 

EDIT: Я перефразировать мой вопрос, помочь мне улучшить это

+2

Просьба уточнить вашу конкретную проблему или добавить дополнительные сведения, чтобы точно указать, что вам нужно. Как это написано в настоящее время, трудно точно сказать, что вы просите. См. Страницу [Как задать страницу] (http://stackoverflow.com/help/how-to-ask) для получения помощи в разъяснении этого вопроса. – NathanOliver

+1

Не мог понять, как это работает? Вы не определили эту линию. Вы сами это пишете, или это кто-то код? –

+2

Для начала существуют неинициализированные значения, так что это просто неправильно. – deviantfan

ответ

2

Если вы озадачены точек здесь то, что они:

  • %.1lf является спецификация формата для точности. Это запрашивает одну цифру после десятичной точки на выходе printf.
  • 1. и 2. в (a*1.+b)/2. означает, что эти литералы double (в отличие от 1, что было бы int и 1.f что бы float). Тот, кто написал этот фрагмент, вероятно, пытался избежать усечения при вычислении этого среднего (данные a и b - int).
-1

Похоже, он печатает среднее значение между a и b.

Это, если решит, когда результат будет необходимо десятичную точку .5:

bool f1,f2; 
f1=a%2; 
f2=b%2; 
if (f1==f2) 

Было бы лучше просто написать:

// get a and b from somewhere 
if ((a+b)%2) // check if sum can be divided by 2 
    printf("%.1lf\n",(a+b)/2.); // %.1lf will print value with 1 decimal ("xX.X") 
else 
    printf("%.0lf\n",(a+b)/2.); // %.0lf will print value without decimals ("xX") 
0

Походит:

printf("%g", (a+b)/2.); 

эмуляции.