2017-04-14 55 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ç我敢肯定,这将工作,因为它只是内部的'开关'是导致问题。 –