2017-02-05 1 views
0

Ich würde lieben, wenn Sie mir erklären könnten, warum das folgende Stück rekursiven Code das Wort "Test" nicht drucken. Danke im Voraus.Verständnis der Logik hinter einem Stück C-Code

void drawTetriminosEachPosition(int **tetriminos, char **dBoard, int **tBoard, int i){ 
    char c; 
    char **dBoard2; 

    if(tetriminos[i] == '\0') 
    { 
     return; 
    }  
    else 
    { 
    dBoard2 = dBoard; 
    DrawTetrimino(tBoard, tetriminos[i], dBoard, i+65); 
    } 
    i++; 
    return (drawTetriminosEachPosition(tetriminos,dBoard,tBoard,i)); 

    ft_putstr("test"); 
    if(checkChar(tBoard,tetriminos[i])) 
    { 
     dBoard = dBoard2; 
     return (drawTetriminosEachPosition(tetriminos,dBoard,tBoard,i)); 
    }  
} 
+2

warum sollte es '„test“drucken'? alles nach der 'return'-Anweisung wird nicht ausgeführt – UnholySheep

+0

scheint ich immer noch nicht rekursiv gut genug zu verstehen, dachte ich, dass sobald die tetriminos [i] == '\ 0' würde es zum vorherigen Aufruf der drawTetriminosEachPosition und zurückkehren Fortsetzung von diesem Punkt – Patratel

+0

Aber du bist zurück! Entfernen Sie die Rückgabe - rufen Sie einfach die Funktion vor der ft_putstr. – cdcdcd

Antwort

2

Anweisungen nach einer Rückgabe werden nie ausgeführt. Da die erste

return (drawTetriminosEachPosition(tetriminos,dBoard,tBoard,i)); 

nicht von einer Bedingung abhängt, wird der folgende Code nicht ausgeführt.

+0

Danke ich denke, ich weiß, wie man es jetzt beheben – Patratel

1

Wenn die Steuerung return ... erreicht, kehrt sie einfach zurück und die nächsten Zeilen werden nicht ausgeführt. Vielleicht haben Sie dazwischen etwas Logik verpasst?

Ab jetzt können Sie diesen Teil löschen es nicht

egal
ft_putstr("test"); 
    if(checkChar(tBoard,tetriminos[i])) 
    { 
     dBoard = dBoard2; 
     return (drawTetriminosEachPosition(tetriminos,dBoard,tBoard,i)); 
    } 
+0

ok jetzt ich Verstehe, wo ich es falsch gemacht habe, danke, ich werde das Koala geben, seit er das erste Mal war – Patratel

Verwandte Themen