2016-03-30 7 views
0

Wenn ich meinen Code kompiliere, funktionieren die zwei verbundenen Funktionen unter dem Programm nicht richtig. Wenn ich den Code auf meinem PC kompiliere, erhalte ich keine Fehler, sobald ich eine der Karten geladen habe und zum Hauptmenü zurückkehre, funktioniert die Option 1-2 richtig, aber ich kann die dritte Option nicht verwenden. Mit anderen Worten, ich kann das Spiel nicht beenden. Stattdessen druckt es "Auf Wiedersehen!" und bittet mich, eine Option zu wählen. Dies geschieht nur, wenn ich in die "Do While" -Schleife gehe und dort die dritte Option wähle. Wenn ich den Code im Terminal kompiliere, bekomme ich irgendwie die Fehlermeldung im Titel. Die gleichen Fehler treten im Terminal auf. Irgendwelche Ideen, wie man dieses Problem löst? Ich kann bei Bedarf zusätzliche Codestücke bereitstellen.Carboard.c: 12: 1: Warnung: Steuerung erreicht Ende der nicht-void Funktion [-Wenden-Typ]

erste:

int main() { 

printf("Welcome to Car Board \n"); 
printf("-------------------- \n"); 
printf("1. Play game \n"); 
printf("2. Show student's information \n"); 
printf("3. Quit \n\n"); 

showMenu(); 

} 

void showMenu(){ 
    Cell board[BOARD_HEIGHT][BOARD_WIDTH]; 
    int choice = validateNumber(); 
    if(choice == 1){ 

    showCommands(); 
    initialiseBoard(board); 
    displayBoard(board, NULL); 

    printf("load <g>\n"); 
    printf("quit\n\n"); 

    playGame(); 

    } 

    if (choice == 2){ 

    showStudentInformation(); 

    } 

    if (choice == 3){ 

    printf("Good Bye!\n\n"); 

} 

    else showMenu(); 
} 

Zweite ein:

void playGame() 
{ 
    Cell board[BOARD_HEIGHT][BOARD_WIDTH]; 
    char str1[] = {"load 1"}; 
    char str2[] = {"load 2"}; 
    char str3[] = {"quit"}; 
    char * choice; 


do { 
    choice = validateString(); 
    if (strcmp(choice, str1) == 0) { 

     printf("\n"); 
     loadBoard(board, BOARD_1); 
     displayBoard(board, NULL); 
     playGame(); 

    } 

    if(strcmp(choice, str2) == 0){ 

     printf("\n"); 
     loadBoard(board, BOARD_2); 
     displayBoard(board, NULL); 
     playGame(); 

    } 

    if(strcmp(choice, str3) == 0){ 

     printf("\n"); 
     printf("Welcome to Car Board \n"); 
     printf("-------------------- \n"); 
     printf("1. Play game \n"); 
     printf("2. Show student's information \n"); 
     printf("3. Quit \n\n"); 
     showMenu(); 

    } 

    else { 
     printf("Invalid input\n\n"); 
     playGame(); 

    } 

} 
while(strcmp(choice, str1) != 0 && strcmp(choice, str2) != 0 && strcmp(choice, str3) != 0); 


} 
+0

Versuchen Sie das Hinzufügen 'return 0 'in Ende der Haupt loszuwerden, die Warnung erhalten – 4386427

+0

den Code anzeigen für' validateNumber' – 4386427

+0

'int validateNumber() { char Zeile [LINE_LEN + EXTRA_SPACES]; Zeichen * Ende; Int-Eingang; do { printf ("Bitte geben Sie Ihre Wahl ein:"); fgets (Zeile, LINE_LEN + EXTRA_SPACES, stdin); if (Zeile [strlen (Zeile) - 1]! = '\ N') { readRestOfLine(); weitermachen; } Linie [strlen (Linie) - 1] = 0; input = strtol (Linie, & Ende, 0); } while (* end); Return-Eingang; } ' – sscryp

Antwort

0

Versuchen Zugabe return 0 in Ende der Haupt der Warnung loszuwerden

Ferner sollten Sie alle loszuwerden, die rekursive Aufrufe. Statt

void showMenu(){ 
    Cell board[BOARD_HEIGHT][BOARD_WIDTH]; 
    int choice = validateNumber(); 
    if(choice == 1){ 
     showCommands(); 
     initialiseBoard(board); 
     displayBoard(board, NULL); 
     printf("load <g>\n"); 
     printf("quit\n\n"); 
     playGame(); 
    } 

    if (choice == 2){ 
     showStudentInformation(); 
    } 

    if (choice == 3){ 
     printf("Good Bye!\n\n"); 
    } 
    else showMenu(); // Recursive call 
} 

Versuchen

void showMenu(){ 
    Cell board[BOARD_HEIGHT][BOARD_WIDTH]; 

    while(1) { // Loop until choice is 3 

     int choice = validateNumber(); 
     if(choice == 1){ 
      showCommands(); 
      initialiseBoard(board); 
      displayBoard(board, NULL); 
      printf("load <g>\n"); 
      printf("quit\n\n"); 
      playGame(); 
     } 

     else if (choice == 2){ 
      showStudentInformation(); 
     } 

     else if (choice == 3){ 
      printf("Good Bye!\n\n"); 

      return; // End the function 
     } 
    } 
} 

Die gleiche Idee sollte auf die PlayGame Funktion angewendet werden, der rekursiven Aufrufe loszuwerden. Auch nicht nennen ShowMenu von PlayGame - nur ein return

+0

Vielen Dank! Mein Problem gelöst Ich bin ziemlich neu in der C-Programmiersprache, wie Sie erraten können. Ich versuche mit meiner Aufgabe fertig zu werden. Ich könnte ein paar mehr in der Zukunft helfen! Danke noch einmal! – sscryp

Verwandte Themen