sake0126 发表于 2025-7-2 18:58:21

萌新求助

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

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

遇到的问题:
工具主页
https://vip.123pan.cn/1813689450/yk6baz03t0n000d7w33h2g6opltajvckDIYPDwQ1BIFyDcxPAID1DY==.png

用户输入序号之后判断用户输入 执行对应的代码,判断写了0-9,和一个else
https://vip.123pan.cn/1813689450/ymjew503t0l000d7w32x9dtsnjxb4fk2DIYPDwQ1BIFyDcxPAID1DY==.png


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

https://vip.123pan.cn/1813689450/yk6baz03t0l000d7w33fglu20jy234arDIYPDwQ1BIFyDcxPAID1DY==.png


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


main.h

void pause() {
        system("pause>nl");
}

main.cpp


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

int num = 0;

scanf_s("%d", &num);

//printf("%d" ,num);
if (num=0)
{

}
else if (num == 1)
{

}
else if(num == 2)
{

}
else if (num == 3) {


}
else if (num == 4) {


}
else if (num == 5) {


}
else if (num == 6) {


}
else if (num == 7) {


}
else if (num == 8) {


}
else if (num == 9) {


}
else {
      printf("输入错误 按任意键返回主页");
        pause();
        main();
}

FishC 发表于 2025-7-2 18:59:46

根据你的描述,问题在于递归调用 `main()` 导致历史输出未被清除。以下是解决方案和代码优化建议:

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

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

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

int main() {
    while (1) {// 主循环
      system("cls");// 清屏(Windows系统)
      // 显示主菜单
      printf("==============工具箱主菜单==============\n");
      printf(" 功能1\n");
      printf(" 功能2\n");
      // ...其他菜单项...
      printf(" 退出\n");
      printf("=======================================\n");

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

      if (num == 0) {
            printf("程序已退出");
            break;// 跳出循环
      }
      else if (num == 1) {
            // 执行功能1
      }
      // ...其他功能判断...
      else if (num == 9) {
            // 执行功能9
      }
      else {
            printf("输入错误,按任意键重新选择...");
            system("pause > nul");// 等待按键
            // 不调用main(),循环会自动刷新菜单
      }
    }
    return 0;
}

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

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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 萌新求助