2017-04-08 6 views
-2

Ich bin ganz verwirrt durch, wie meine Antwort ist mir einen Schwimmer für diese einfache Funktion nicht geben:Warum gibt meine Funktion eine ganze Zahl zurück, obwohl ich die Antwort als Float angegeben habe?

#include <iostream> 
using namespace std; 


int average(int a[], int num){ 
    float avg = 0; 
    for (int i = 0; i<num; i++){ 
     avg += a[i]; 
    } 
    avg = avg/num; 
    cout<<avg<<endl; //gives 1.5 
    return avg; 
} 

int main(){ 
    int a[] = {1,2}; 
    float result = average(a, 2); 
    cout<<result<<endl; //gives 1 
    return 0; 
} 

Wie in den Kommentaren zu sehen sind, warum die Ausgabe der Funktion 1 sein würde, wenn der letzte berechnete Wert ist 1,5? Ich habe auch die Antworten angegeben, die in float-Form zurückgegeben werden sollen, also weiß ich nicht wirklich, warum es mir immer noch einen int gibt.

+2

'Durchschnitt' sollte Float, nicht Int. –

+0

Ja, aber die Ausgabe von 'result' ist 1 und nicht 1.5. Dies ist der seltsame Teil .. – kwotsin

+3

'int average (int a [], int num)' ist die Signatur einer Funktion, die 'int' zurückgibt. –

Antwort

4

Ich habe auch angegeben, die Antworten in Float-Form zurückgegeben werden, so dass ich nicht wirklich weiß, warum es mir immer noch eine Int.

Da average kehrt int, so dass Ihr float (die Sie in average zurück) zu int gegossen wird, kehrte dann zurück zu float und in result gespeichert. Verlieren jede Präzision wegen der Besetzung zu int.

+0

Vielen Dank für Ihre Antwort! Ich habe nicht gemerkt, dass ich meine Funktion als int deklariert habe, deshalb. – kwotsin

3
float average(int a[], int num){ 
    float avg = 0; 
    for (int i = 0; i<num; i++){ 
     avg += a[i]; 
    } 
    avg = avg/num; 
    cout<<avg<<endl; //gives 1.5 
    return avg; 
} 

Sie vergessen, Rückgabewerttyp in Funktionsdeklaration als Float anzugeben.

Verwandte Themen