鱼C论坛

 找回密码
 立即注册
查看: 56|回复: 1

萌新求助

[复制链接]
发表于 前天 18:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 sake0126 于 2025-7-2 18:59 编辑

之前完全没有接触过c语言 这两天尝试使用c语言写了一个工具箱,实际没啥难度 就是调用adb指令实现功能

遇到的问题:
工具主页

                               
登录/注册后可看大图


用户输入序号之后判断用户输入 执行对应的代码,判断写了0-9,和一个else

                               
登录/注册后可看大图



输入0-9以外的选项会提示返回主页,下面返回主页我直接使用了main();返回主页后他会把”输入错误 按任意键返回主页“也输出出来


                               
登录/注册后可看大图



小白不懂哪里的问题,诚心求教


  1. main.h

  2. void pause() {
  3.         system("pause>nl");
  4. }

  5. main.cpp


  6. printf("请输入序号选择对应的功能:");

  7. int num = 0;

  8. scanf_s("%d", &num);

  9. //printf("%d" ,num);
  10. if (num=0)
  11. {

  12. }
  13. else if (num == 1)
  14. {

  15. }
  16. else if(num == 2)
  17. {

  18. }
  19. else if (num == 3) {


  20. }
  21. else if (num == 4) {


  22. }
  23. else if (num == 5) {


  24. }
  25. else if (num == 6) {


  26. }
  27. else if (num == 7) {


  28. }
  29. else if (num == 8) {


  30. }
  31. else if (num == 9) {


  32. }
  33. else {
  34.         printf("输入错误 按任意键返回主页");
  35.         pause();
  36.         main();
  37. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 前天 18:59 | 显示全部楼层
根据你的描述,问题在于递归调用 `main()` 导致历史输出未被清除。以下是解决方案和代码优化建议:

### 问题分析
1. 直接递归调用 `main()` 会导致堆栈累积,每次返回都会重新显示之前的所有输出
2. 使用 `system("pause>nl")` 暂停后没有清屏

### 解决方案(使用循环代替递归)
修改你的主程序结构,用循环控制菜单显示:

  1. #include <stdlib.h>  // 包含清屏函数

  2. int main() {
  3.     while (1) {  // 主循环
  4.         system("cls");  // 清屏(Windows系统)
  5.         // 显示主菜单
  6.         printf("==============工具箱主菜单==============\n");
  7.         printf("[1] 功能1\n");
  8.         printf("[2] 功能2\n");
  9.         // ...其他菜单项...
  10.         printf("[0] 退出\n");
  11.         printf("=======================================\n");

  12.         printf("请输入序号:");
  13.         int num;
  14.         scanf("%d", &num);  // 注意:原代码用scanf_s更安全

  15.         if (num == 0) {
  16.             printf("程序已退出");
  17.             break;  // 跳出循环
  18.         }
  19.         else if (num == 1) {
  20.             // 执行功能1
  21.         }
  22.         // ...其他功能判断...
  23.         else if (num == 9) {
  24.             // 执行功能9
  25.         }
  26.         else {
  27.             printf("输入错误,按任意键重新选择...");
  28.             system("pause > nul");  // 等待按键
  29.             // 不调用main(),循环会自动刷新菜单
  30.         }
  31.     }
  32.     return 0;
  33. }
复制代码


### 关键修改说明
1. **循环结构**:用 `while(1)` 替代递归调用
2. **清屏操作**:每次循环开始时 `system("cls")` 清除旧内容
3. **错误处理**:
   - 输入错误时仅暂停,不清屏(循环会自动刷新)
   - 使用 `> nul` 隐藏暂停提示(Windows系统)
4. **退出机制**:输入0时用 `break` 退出循环

### 注意事项
1. 实际开发中应避免递归调用 `main()`
2. `system("cls")` 是Windows专属命令,Linux/Mac需改用 `system("clear")`
3. 每个功能执行后建议添加:
  
  1. printf("操作完成,按任意键返回...");
  2.    system("pause > nul");
复制代码


这样修改后,菜单会保持整洁,且不会出现历史信息残留的问题。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-4 12:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表