2015-12-30 3 views
-4

Я не понимаю, почему эта программа использует поплавки, но я получаю 4 вывода. Я думал, что плавает только выходные десятичные числа. Любая помощь будет оценена по достоинству, я играл главную роль в этом коде некоторое время.Почему этот код распечатывает 4?

#include <iostream> 
#include <stdarg.h> 

using namespace std; 

float avg(int Count, ...) 
{ 
    va_list Numbers; 
    va_start(Numbers, Count); 

    int Sum = 0; 
    for (int i = 0; i < Count; ++i) 
     Sum += va_arg(Numbers, int); 

    va_end(Numbers); 
    return (Sum/Count); 
} 

int main() 
{ 
    float Average = avg(10, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9); 

    cout << Average; 

    return 0; 
} 
+1

Используйте отладчик. – Amit

+0

Помимо любой проблемы, у вас есть 'Sum + = va_arg (Numbers, int);' неверно. Вы переинтерпретируете 'float' как' int', и это не сработает вообще. –

+0

@CaptainObvlious: Я думаю, что он должен вернуть среднее значение из 10 целых чисел. –

ответ

1

Ваша сумма - это int; когда вы возвращаетесь, вы делите сумму по графу, которая обрезает ее до десятичной части, и затем преобразует ее в поплавок, чтобы вернуть ее.

Чтобы получить правильный ответ, вы должны сначала преобразовать его в float, а затем разделить и вернуть его: например.

return ((float) Sum)/Count; 

Или вы могли бы объявить Sum как float, и это избавится от этой проблемы.

2

Ваш код усекает 45/10 по 4, так как 45/10 является целым делением.

Если вы хотите сохранить десятичную часть, слегка измените выражение, чтобы сделать его делением с плавающей запятой.

return (1.0*Sum/Count); 
Смежные вопросы