C 如何阻止菜单在重新启动时自动闪烁?

C 如何阻止菜单在重新启动时自动闪烁?,c,menu,console,C,Menu,Console,我有以下代码: #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); print

我有以下代码:

#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;
}
这将打印一个菜单,并让您选择导航不同菜单的选项,而当插入的字符无效时,该选项用于重复该过程,但当发生这种情况时,控制台开始闪烁,程序会自动关闭。这是如何造成的,我如何修复它?
谢谢

运行代码后,似乎没有任何东西无法控制地闪烁,程序运行得非常好。没有崩溃或错误。代码中唯一的问题是switch语句。它们最终形成一个无限循环。我的建议是休息一下;在每一个案件结束时,我都想摆脱这个循环。除此之外,您的代码似乎运行良好

以下代码仅用于修复switch语句中的无限循环问题

我相信我找到了你代码的错误。在您关于您的问题的简要描述中,我碰巧发现了错误。在第一次扫描中,如果用户输入字符,程序将中断。我的编辑不停地重复这个问题

我建议使用if/else循环来解决您的问题。另一种解决方案是将int-frstEscolha更改为无符号int-frstEscolha。如果用户碰巧输入了一个字符,它可以在不中断程序的情况下输入字符的值。但强烈建议在这种情况下使用if/else

如果您使用的是unsigned int,则扫描的工作方式如下

scanf("%lf", &varName);

当你在一个英文网站上发布代码时,请翻译代码中的字符串,这将使人们更容易理解和阅读。我发现了你的错误。如果在第一个scanf语句中输入一个字符,则代码将不间断地运行,并自行中断@SelmanGenç这不是一个教程网站,但你必须学习和理解指针。发布的代码不为字符串trdENome、trdENome1和trdENome2分配内存。这些可能应该是数组,也可能应该在main的范围内声明。地址运算符&使用不正确;在switch语句中应使用break语句。如果输入的内容不同于1或2,则会导致此问题,你能试着看看是我还是你也有错误吗?@SelmanGençI很确定这会起作用,因为只有内部开关才是问题的根源。@narusin没有中断,只是防止代码在另一种情况下掉落?它实际上并没有打破循环。我会在@zmirba检查一下。但在哪一部分,我知道。如果你检查他的代码,就不会中断他的switch语句。它会无限地卡在那里@塞尔曼根萨
scanf("%lf", &varName);