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
相关产品推荐
相关产品推荐

