2017-04-14 54 views
1

我有下面的代碼:如何在重新啓動時停止菜單的閃爍不正常?

#include <stdio.h> 
#include <stdlib.h> 
int main(){ 
int s1 = 0; 
int s2 = 0; 
int frstEscolha; 
do{ 
    printf("\n\n WELCOME \n\n"); 
    printf(" 1- JOGAR \n"); 
    printf(" 2- SAIR \n"); 
    scanf ("%d", &frstEscolha); 
    printf ("%d %d",s1,s2); 
     switch (frstEscolha) { 
      system ("cls"); 
      int sndEscolha; 
      case (1): 
      s1 = 1; 
      printf ("\n\n NUMBER OF PLAYERS \n\n"); 
      printf ("1- ONE PLAYER \n"); 
      printf ("2- TWO PLAYERS \n"); 
      scanf ("%d", & sndEscolha); 
      system ("cls");   
      do{ 
       switch (sndEscolha) { 
        char *trdENome , *trdENome1, *trdENome2;  
        case (1): 
         s2 = 1; 
         printf ("\nPLAYER NAME:  \n"); 
         scanf ("%s", &trdENome); 
         printf("\nGOOD GAME %s \n\n", &trdENome); 

        case (2): 
         s2 = 1; 
         printf ("\nPLAYER 1 NAME  \n"); 
         scanf ("%s", &trdENome1); 
         printf ("\nPLAYER 2 NAME  \n"); 
         scanf ("%s", &trdENome2); 
         printf("\nGOOD GAME %s e %s \n\n", &trdENome1, &trdENome2); 

        default : 
         printf ("Invalid character, try again!!"); 
         s2 = 0; 
       } 
      } 
      while (s2==0);     
     case (2): exit (0); 
     default : 
      printf ("Invalid character, try again!!"); 
      s1 = 0; 
     } 
} 
while (s1 == 0); 
return 0; 
} 

這應該是打印菜單,讓你選擇你的選擇來瀏覽不同的菜單,用於重複的過程中,而當插入字符不是有效,但是當這種情況發生時,控制檯開始閃爍,程序崩潰。這是如何造成的,我該如何解決? 謝謝

+0

當您在英文網站上發佈代碼時,請翻譯代碼中的字符串,這會讓人們更容易理解和閱讀。 –

+0

我發現你的錯誤。如果你在第一個'scanf'語句中輸入一個字符,代碼就會不停地運行,並且會自行破壞。 @SelmanGenç –

+0

這不是一個教程網站,但你必須學習和理解指針。發佈的代碼不會爲字符串'trdENome','trdENome1'和'trdENome2'分配內存。這些應該可能是數組,也應該在'main()'的範圍內聲明。地址運算符「&」使用不正確; switch語句應該使用'break'語句。 –

回答

-2

運行你的代碼後,似乎沒有任何控制閃爍,程序運行得很好。沒有崩潰或錯誤。您的代碼中唯一的問題是您的switch聲明。他們最終陷入無限循環。我推薦的是在每個案例的最後放置一個break;以擺脫這個循環。除此之外,你的代碼似乎運行良好。

下面的代碼是唯一的解決在switch聲明

case(1): 
    //your code here 
    break; 

我相信我發現了錯誤代碼中的無限循環問題。在你簡要描述你的問題時,我偶然發現了錯誤。在你的第一個scanf,如果用戶輸入一個字符,程序中斷。 我的編譯器不斷重複這個問題。

我推薦的是使用if/else循環來解決你的問題。另一種解決方案是將int frstEscolha更改爲unsigned int frstEscolha。如果用戶恰好輸入一個字符,它可以在不破壞程序的情況下爲字符賦值。但強烈建議在這種情況下使用if/else

如果您使用的是unsigned int,則scan的工作原理與此類似。

scanf("%lf", &varName); 
+0

中斷不會解決無限循環問題。 –

+0

如果您輸入與1或2不同的內容,則會導致此問題,請嘗試查看它是否僅限於我或者是否還出現錯誤? – zmirba

+0

@SelmanGenç我敢肯定,這將工作,因爲它只是內部的'開關'是導致問題。 –