2016-10-23 2 views
-4

Ich benutze HackerRank, die 4 Zahlen (3, 4, 6, 5) jeweils für die Parameter eingeben und die Aufgabe ist in der Lage, die höchste Zahl zurückgeben, aber wenn ich dies kompilieren Programm wird es 3 (a) anstelle von 6 (b) ausgeben und ich bin unsicher, wo ich falsch liege.C++ liefert eine falsche Ganzzahl auf if Anweisung

#include <iostream> 
#include <cstdio> 
using namespace std; 

int max_of_four(int a, int b, int c, int d) { 
if ((a > b) && (a > c) && (a > d)) { 
    return a; 
} 
if ((b > a) && (b > c) && (b > d)) { 
    return a; 
} 
if ((c > b) && (c > a) && (c > d)) { 
    return a; 
} 
else { 
    return d; 
} 
} 

int main() { 
int a, b, c, d; 
scanf("%d %d %d %d", &a, &b, &c, &d); 
int ans = max_of_four(a, b, c, d); 
printf("%d", ans); 

return 0; 
} 
+2

Bitte unterlassen Sie Fragen zu Online-Code-Richter-Motoren hier. Es ist sehr unwahrscheinlich, dass jemand Ihnen sagen kann, wo Sie in ihren Testfällen versagt haben, da diese normalerweise nicht bekannt gegeben werden. Selbst wenn das, was Sie getestet haben, in Ihrer lokalen Umgebung ausgeführt wurde, haben Sie möglicherweise einige Randfälle, die in der Online-Herausforderung angewendet werden, nicht getestet. Sei kreativ und versuche sie zu finden. Außerdem gibt es auf lange Sicht wahrscheinlich keinen Wert für solche Fragen, außer den Online-Wettbewerb zu betrügen, und nichts wird gelernt. –

+0

Sie können Klammern in der _if-Anweisung weglassen http://www.difranco.net/compsci/C_Operator_Precedence_Table.htm – PinaGamer

+0

@PinaGamer Ich denke, Klammern machen den Ausdruck diskreter. Daran ist nichts falsch. –

Antwort

1

zweite und dritte Rückgabeanweisungen geben a statt b und c zurück.

2

haben Anstatt diese einfachere Version:

int max_of_four(int a, int b, int c, int d) { 
    int max = a; 
    if(b > max) max = b; 
    if(c > max) max = c; 
    if(d > max) max = d; 

    return max; 
} 
0

Sie sind rechte Variablen in 2. und 3. wenn Aussagen nicht zurück. Zurück b und c.