You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言菜单驱动程序无法返回菜单问题求助

C语言菜单驱动程序:实现执行功能后返回菜单并询问是否继续

我正在用C语言编写菜单驱动程序,但完成一个功能后无法返回菜单。请问如何编写程序,使得每次执行完功能后询问用户是否继续,并返回菜单?

附上我的代码:

//program of menu driven program
#include <stdio.h>
#include <stdlib.h>
int main() {
    int fac = 1, b, num, p, prime, click, out; //click for selecting the function and ext for goto
    while (1) {
        printf("Welcome to Varied Maths!");
        printf("\nYou can perform the following things here");
        printf("\n1.Factorial of a number\n2.Prime or not\n3.Odd or even\n4.Exit");
        printf("\nEnter your choice:");
        scanf("%d", &click);
        switch (click) {   //for seleting from menu
            case 1: //for factorial 
              printf("Factorial Calculator\n");
              printf("Enter the number:");
              scanf("%d", &num);
              for (p = 1; p <= num; p++) {
                fac = fac * p; //fac=1 which gets multiplied with the num entered the number gets increment and so on
                printf("Factorial of %d is %d", num, fac);
              }
              break;

            case 2: //prime numbers using for loop  
              //int prime,b,ent
              printf("Prime or not\n");
              printf("Enter the number:");
              scanf("%d", &prime);
              //int prime,b;
              if (num == 1) {
                printf("1 is Neither composite nor prime");
              }
              if (num == 0) {
                printf("Neithher compossite nor prime");
              }
              for (b = 2; b <= num - 1; b++)
                if (num % b == 0) {
                    printf("%d Not A prime", num);
                    break;
                }
              if (b == num) {
                printf("Prime Number");
              }
              break;
    
            case 3:
              int odd;
              printf("\nOdd or Even determiner");
              printf("\nEnter the number you want to know about:");
              scanf("%d", &odd);
              if (odd % 2 == 0) {
                printf("The entered number %d is a even number",odd);
              }
              if ((odd % 2) != 0) {
                printf("The entered number %d is a odd number",odd);
              }
              break;
    
            case 4:
              printf("\nThanks for Using Me.\nI would have been too happy if you checked out my functions ");
              break;
        }

        return 0;
    }
}

问题分析与修改步骤

1. 修复程序直接退出的核心问题

你的代码中return 0;放在了while(1)循环内部,导致第一次执行完菜单功能后就直接终止程序,无法回到菜单。需要将return 0;移到**退出选项(case4)**中,确保只有用户选择退出时才结束程序。

2. 重置循环变量避免计算错误

阶乘计算中,fac变量每次计算前需要重置为1,否则多次计算阶乘时会累积之前的结果,导致输出错误。

3. 修正质数判断的变量错误

case2中你输入的是prime变量,但逻辑判断却用了num,这会导致判断逻辑完全错误,需要将所有num替换为prime。

4. 添加“是否继续”的询问逻辑

在每个功能执行完毕后,询问用户是否继续操作,根据用户选择决定是回到菜单还是退出程序。

修改后的完整代码

//program of menu driven program
#include <stdio.h>
#include <stdlib.h>

int main() {
    int fac, b, num, p, prime, click;
    char choice;
    
    while (1) {
        // 打印菜单
        printf("\nWelcome to Varied Maths!");
        printf("\nYou can perform the following things here");
        printf("\n1.Factorial of a number\n2.Prime or not\n3.Odd or even\n4.Exit");
        printf("\nEnter your choice:");
        scanf("%d", &click);
        
        switch (click) {
            case 1: // 阶乘计算
                printf("\nFactorial Calculator\n");
                printf("Enter the number:");
                scanf("%d", &num);
                fac = 1; // 每次计算前重置fac为1
                for (p = 1; p <= num; p++) {
                    fac *= p;
                }
                printf("Factorial of %d is %d\n", num, fac);
                break;

            case 2: // 质数判断
                printf("\nPrime or not\n");
                printf("Enter the number:");
                scanf("%d", &prime);
                if (prime == 1 || prime == 0) {
                    printf("%d is Neither composite nor prime\n", prime);
                } else {
                    int is_prime = 1;
                    for (b = 2; b * b <= prime; b++) { // 优化循环条件,减少计算量
                        if (prime % b == 0) {
                            is_prime = 0;
                            break;
                        }
                    }
                    if (is_prime) {
                        printf("%d is a Prime Number\n", prime);
                    } else {
                        printf("%d is Not A Prime\n", prime);
                    }
                }
                break;
    
            case 3: // 奇偶判断
                printf("\nOdd or Even determiner");
                printf("\nEnter the number you want to know about:");
                scanf("%d", &num);
                if (num % 2 == 0) {
                    printf("The entered number %d is an even number\n", num);
                } else {
                    printf("The entered number %d is an odd number\n", num);
                }
                break;
    
            case 4: // 退出程序
                printf("\nThanks for Using Me.\n");
                return 0; // 仅在选择退出时返回0,终止程序
            default:
                printf("\nInvalid choice! Please enter a number between 1-4.\n");
        }
        
        // 询问用户是否继续
        if (click != 4) {
            printf("\nDo you want to continue? (y/n): ");
            scanf(" %c", &choice); // 空格跳过之前的换行符
            if (choice == 'n' || choice == 'N') {
                printf("\nThanks for Using Me.\n");
                break; // 退出循环,结束程序
            }
        }
    }
    return 0;
}

关键修改说明

  • 将return 0移至case4中,确保只有用户选择退出时才终止程序。
  • 阶乘计算前重置fac为1,避免累积错误。
  • 修正质数判断的变量逻辑,使用输入的prime变量进行判断。
  • 添加了默认选项处理,提示无效输入。
  • 在每个功能执行后(除了退出),询问用户是否继续,根据选择决定回到菜单或退出。

内容的提问来源于stack exchange,提问作者Harshal Malani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 02:35:00