2016-04-08 8 views
-3

このように私のこの機能では、 "carboard.c:79:1:warning:制御は非void関数[-Wreturn-type]"の終わりに達します。プログラムは正常に動作しますが、私はそれをきれいにコンパイルしたいだけです。ここ"制御は非空白関数の終わりに達する"という警告を解決する方法は?

は、関数のコードです:

int loadMainMenu() 
{ 
    char choice[LINE + EXTRA_SPACES]; 
    Boolean menu = TRUE; 

    printf("\nWelcome to Car Board\n"); 
    printf("--------------------\n"); 
    printf("1. Play Game\n"); 
    printf("2. Show Student's Information\n"); 
    printf("3. Quit\n"); 
    printf("\n"); 
    printf("Please Enter Your Choice:\n"); 


    do 
    { 
     int input; 

     fgets(choice, LINE + EXTRA_SPACES, stdin); 

     if (choice[strlen(choice) - 1] != '\n') 
     { 
      printf("BUFFER OVERFLOW!\n\n"); 
      readRestOfLine(); 
     } 

     choice[strlen(choice) - 1] = 0; 


     input = atoi(choice); 

     switch(input) 
     { 
      case 1: playGame(); 
       break; 
      case 2: showStudentInformation(); 
        loadMainMenu(); 
       break; 
      case 3: 
       printf("Bye bye! \n"); 
       return EXIT_SUCCESS; 
       break; 
      default: printf("Invalid input\n"); 
        loadMainMenu(); 
       break;  
     } 
    }while(menu); 
} 
+0

無限ループが必要な場合は、別の変数は必要ありません。while(true)は 'while(menu)'と同様に動作します。 – EOF

+3

有名な最後の言葉:「プログラムはうまくいっています」 - これを聞くたびに1セントがあるとしたら...「void」関数を使って、本当に復帰したくない場合は、 '_Noreturn'とするのが最良です。 – Olaf

+0

関数が値を返すように定義されています。しかし、関数内のいくつかのパスは値を返しません。関数の最後に 'return 0'を追加するか、デフォルトで返されるはずのものがあればそれを追加してください。 – kaylum

答えて

2

は、あなたのコード内でreturnステートメントを持っている必要があります。あなたの関数は整数を返すので、あなたは何かを持っている必要があります。return x;ここでxは整数です。あるいは、関数voidを宣言できます。

+0

コードは転記されても、機能の最後に到達しません。 – EOF

+0

そのための別の宣言を編集しました。 – user902384

+0

上記のコメントを読んでください! – Olaf

1

コンパイラは、do ... whileが決して終了しないことを理解するのは賢明ではありません。この問題を解決するには

、まずそれが定数を使用して、無限guarantedすることによりループすることはできません終了を確認してください。問題が解決しない場合は、

while (true) { 
    ... 
} 

コンパイラのかもしれないを試してみてください

do { 

} while (true); 

を特定のパターン(for (; ;)も試してみる価値があるかもしれません;それはまた個人的な好みの問題です)が必要です。

それでも機能しない場合は、上記のループの後にreturn 0;としてください。それは最適化されているかもしれないので、最高でも余分なコードはありません。最悪の場合、あなたはいくつかのぶら下がったコードで生きなければならない。

プラグマを使用して警告を一時的に無効にする方法もあります。 これは実際に最後のressortに過ぎません。

関連する問題