【问题标题】:How to stop a menu from flickering incontrolably when restarted?重新启动时如何阻止菜单不受控制地闪烁?
【发布时间】:2017-04-14 00:01:46
【问题描述】:

我有以下代码:

#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;
}

这应该打印一个菜单并让您选择导航不同菜单的选项,while 用于在插入的字符无效时重复该过程,但是当这种情况发生时控制台开始闪烁并且程序崩溃.这是如何引起的,我该如何解决? 谢谢

【问题讨论】:

  • 当您在英文网站上发布代码时,请翻译代码中的字符串,这样人们更容易理解和阅读。
  • 我发现了你的错误。如果您在第一个scanf 语句中输入一个字符,则代码会不停地运行并且会自行中断。 @SelmanGenç
  • 这不是一个教程网站,但你必须学习和理解指针。发布的代码不会为字符串trdENometrdENome1trdENome2 分配内存。这些应该是数组,也应该在main() 的范围内声明。地址运算符&amp;使用错误; break 语句应在switch 语句中使用。

标签: c menu console


【解决方案1】:

运行您的代码后,似乎没有任何东西无法控制地闪烁,并且程序运行良好。没有任何崩溃或错误。您的代码中唯一的问题是您的 switch 语句。他们最终陷入无限循环。我建议在每个案例的末尾添加一个break; 以摆脱该循环。除此之外,您的代码似乎运行良好。

以下代码只是为了修复switch语句中的死循环问题

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

我相信我发现了您的代码的错误。在您对问题的简要描述中,我碰巧发现了错误。在你第一个scanf,如果用户输入一个字符,程序就会中断。 我的编译器不断重复这个问题。

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

如果您使用unsigned intscan 的工作方式如下。

scanf("%lf", &varName);

【讨论】:

  • 这个问题是你输入的不是1或者2,请问你是不是只有我一个人,或者你也报错了?
  • @SelmanGenç 我很确定这会起作用,因为只有内部的switch 会导致问题。
  • @narusin 不会中断只会防止代码在其他情况下掉落?它实际上并没有打破循环。
  • 我会检查一下@zmirba。但在哪一部分。
  • 我知道。如果你检查他的代码,没有break 可以摆脱他的switch 语句。它会无限卡在那里。 @SelmanGenç
猜你喜欢
  • 2020-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多