2015-02-25 9 views
5

Ich versuche eine rekursive Funktion zu schreiben, um zu überprüfen, ob ein Benutzer eine Zahl eingegeben hat, die alle geraden Ziffern enthält.Rekursive Funktion, um zu überprüfen, ob alle Ziffern in einer int-Variablen gerade sind

Was ist los mit meiner Logik? Als ich versuchte, mit "556" Ergebnis ist 1.

int main() 
{ 
    int num; 
    int *result; 
    printf("Enter a number: "); 
    scanf("%d", &num); 
    allEven(num, &result); 
    printf("allEven(): %d", result); 

} 
void allEven(int number, int *result) 
{ 
    if ((number % 10) % 2) // if the last digit is odd 
    { 
     *result = 0; 
    } 
    else 
    { 
     *result = 1; 
     if ((number/10) != 0) //not the last digit to evaluate, we call the function again. 
     { 
      allEven((number/10), &result); 
     } 
    } 
} 
+0

Haben Sie nicht einen Compiler arror bei' allEven erhalten ((Nummer/10), & Ergebnis); 'zweiter Parameter? – CiaPan

+0

Sieht aus wie Frage 6 Ihrer Programmieraufgabe – user1758596

Antwort

3

Sie sollten es so aufschreiben, um den Code zu kompilieren:

void allEven(int number, int *result) 
{ 
    if ((number % 10) % 2) // if the last digit is odd 
    { 
     *result = 0; 
    } 
    else 
    { 
     *result = 1; 
     if ((number/10) != 0) //not the last digit to evaluate, we call the function again. 
     { 
      allEven((number/10), result); 
     } 
    } 
} 
int main() 
{ 
    int num; 
    int result; 
    printf("Enter a number: "); 
    scanf("%d", &num); 
    allEven(num, &result); 
    printf("allEven(): %d", result); 

} 

1) "int * Ergebnis" ersetzen mit "int result"

2) „allEven ((Anzahl/10) , & Ergebnis)“im Haupt() aufrufen ersetzen mit allEven ((Anzahl/10), Ergebnis)

3) verpasst eine Klammer in allEven Funktion

+0

Ich höre nicht auf für den 2. Parameter von allEven. Frage nicht nach einer Adresse mit (int * result)? Warum geben wir nur "result", das ist ein Wert und keine Adresse, wenn wir allEven aufrufen? –

+1

Wenn Sie es von main() übergeben, geben Sie ihm die Adresse des Ergebnisses (via & result). Aber wenn Sie es von rekursiven allEven() übergeben, haben Sie es dort schon einen Zeiger, so dass wir es ohne "&" – ars

+0

wahrscheinlich verwenden müssen, gibt es noch einige Fehler in der Logik des Codes. Ja, ich denke, es ist ein nützlicher Ratschlag – ars

0

ersetzen

int *result;

Mit

int result;

5

allEven((number/10), &result); sollte mit

allEven((number/10), result); 
ersetzt werden

Da allEven erwartet zweites Argument vom Typ int * und &result ist int **

Auch int *resultint result = 1

Working example here

sein soll, wenn Sie mit dem richtigen Warnflaggen -W -Wall zum Beispiel auf gcc (besser mit -O2) kompilieren , sollten Sie korrekte Warnungen erhalten, um Ihren Code zu korrigieren.

Verwandte Themen