基于菜单的程序,带有while和switch语句?

基于菜单的程序,带有while和switch语句?,c,switch-statement,C,Switch Statement,我是一个初学者,我正在努力自学。我自己写了一个基于菜单的switch case语句。所有程序都正常,但当菜单重新出现时,菜单显示不正确 代码是 int main() { char menu int i,num,fact=1,d; while(1) { printf("enter 'a' to find out factorial of a number\n"); printf("enter 'b' to find out that

我是一个初学者,我正在努力自学。我自己写了一个基于菜单的switch case语句。所有程序都正常,但当菜单重新出现时,菜单显示不正确

代码是

int main()
{
    char menu
    int i,num,fact=1,d;
    while(1)
    {
        printf("enter 'a' to find out factorial of a number\n");
        printf("enter 'b' to find out that number is prime or not\n");
        printf("enter 'c' to find out that number is odd or even\n");
        printf("enter 'd' to exit");
        scanf("%c",&menu);

        switch(menu)
        {
        case 'a':
            printf("please enter the number ");
            scanf("%d",&num);
            for(i=1; i<=num; i++)
                fact=fact*i;
            printf("factorial is %d\n",fact);
            break;

        case'b':
            printf("enter the number");
            scanf("%d",&num);
            for(i=2; i<=num-1; i++)
            {
                if(num%i==0)
                {
                    printf("not a prime number\n");
                    break;
                }
            }
            if(i==num)
            {
                printf("prime number\n");
                break;
            }
            break;

        case'c':
            printf("enter the number\n");
            scanf("%d",&num);
            d=num%2;
            if(d=0)
                printf("its a even number\n");
            else
                printf("its a odd one\n");
            break;

        case'd':
            exit(0);

        }
    }
}
intmain()
{
字符菜单
int i,num,fact=1,d;
而(1)
{
printf(“输入'a'查找数字的阶乘\n”);
printf(“输入'b'以确定该数字是否为素数\n”);
printf(“输入'c'以找出该数字为奇数或偶数\n”);
printf(“输入“d”以退出”);
scanf(“%c”,菜单(&M);
开关(菜单)
{
案例“a”:
printf(“请输入号码”);
scanf(“%d”和&num);
对于(i=1;i试试这个:

   int ok=1;
    while(1)
    {
        if(ok==1)
        {
        printf("enter 'a' to find out factorial of a number\n");
        printf("enter 'b' to find out that number is prime or not\n");
        printf("enter 'c' to find out that number is odd or even\n");
        printf("enter 'd' to exit\n");
        scanf("%c",&menu);
        fflush(stdin);
        }
        ok=1;

        switch(menu)
        {
        case 'a':
            printf("please enter the number ");
            scanf("%d",&num);
            for(i=1; i<=num; i++)
                fact=fact*i;
            printf("factorial is %d\n",fact);
            break;
        ......
        ......
        default: ok=0;break;

        }
    }
intok=1;
而(1)
{
如果(ok==1)
{
printf(“输入'a'查找数字的阶乘\n”);
printf(“输入'b'以确定该数字是否为素数\n”);
printf(“输入'c'以找出该数字为奇数或偶数\n”);
printf(“输入“d”退出\n”);
scanf(“%c”,菜单(&M);
fflush(stdin);
}
ok=1;
开关(菜单)
{
案例“a”:
printf(“请输入号码”);
scanf(“%d”和&num);

对于(i=1;我请学习缩进您的代码,这是一个很好的做法,而且对代码的可重用性和可维护性确实更好。您需要在偶数部分将代码
if(d=0)
改进为
if(d==0)
,否则将永远正确!更改
scanf(%c),&menu);
scanf(%c),&menu)
用于保留换行符。为什么菜单没有正确显示,您面临什么样的特殊情况?您应该在交换机中考虑一个“default”语句,以捕获所有其他输入,并说一些类似“KeyError”等的话。始终捕获交换机的所有情况是一个很好的用法。
默认值:printf(“KeyError:'%c',menu)