课程设计心得_关于switch输入字母进入死循环问题

2023-11-19

做C语言课程设计时,采用了大量的switch,在后期找bug时,当输入字符类型时,如a,*,+之类的,程序进入了死循环,但又不想换成其他的(主要是懒,不想大量改动)

void menu_windows()
{
    int n;
    system("cls");
    fflush(stdin);
   
    printf("\n");
    printf("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n");
	printf("***********************[图书管理系统]***********************\n");
	printf("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n");
	printf("\n                      [1.管理员入口]                      \n");
	printf("\n                      [2.读者入口]                        \n");
	printf("\n                      [3.退出系统]                        \n\n");
	printf("\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n");
	printf("\n\t[请选择]\t·");
    scanf("%d",&n);
    switch(n)
    {
        case 1: login_windows(); break;//管理员登录窗口
        case 2: reader_loginwindows(); break;//读者登录窗口
        case 3: exit(0); break;//退出系统
        default: printf("\t\t输入有误!\n");
            Sleep(1000);
            menu_windows();
            break;
    }
}

所以上网查了一下,scanf函数是从缓冲区接受数值,而当我们输入字母或其他时,字符就一直留在缓冲区,再次循环,scanf再从缓冲区获取时还是字母,就相当跳过了scanf这一句,从而造成死循环。
经过测试后发现,只要把接受输入的变量定义在while循环里面,并给该变量赋值,在scanf之前清空缓冲区,这样程序就可以正常运行了。
即加入fflush(stdin); //清理缓冲区

void menu_windows()
{
    int n;
    system("cls");
    fflush(stdin);//清理缓冲区
    fflush(stdin);
    printf("\n");
    printf("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n");
	printf("***********************[图书管理系统]***********************\n");
	printf("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n");
	printf("\n                      [1.管理员入口]                      \n");
	printf("\n                      [2.读者入口]                        \n");
	printf("\n                      [3.退出系统]                        \n\n");
	printf("\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n");
	printf("\n\t[请选择]\t·");
    scanf("%d",&n);
    switch(n)
    {
        case 1: login_windows(); break;//管理员登录窗口
        case 2: reader_loginwindows(); break;//读者登录窗口
        case 3: exit(0); break;//退出系统
        default: printf("\t\t输入有误!\n");
            Sleep(1000);
            menu_windows();
            break;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

课程设计心得_关于switch输入字母进入死循环问题 的相关文章

随机推荐

  • ICCV 2023

    点击下方卡片 关注 CVer 公众号 AI CV重磅干货 第一时间送达 点击进入 gt 目标跟踪 微信交流群 作者 Jaraxxus 已授权转载 源 知乎 编辑 CVer https zhuanlan zhihu com p 6438354
  • 2018年区块链人才趋势:降温、调节、蓄势待发

    2018年 戊戌年 是一个不平静的年份 自960年前的戊戌年王安石变法 到最近两百年的四个戊戌年 其间发生的大事无不与 变革 息息相关 年初 从科技圈 金融圈里 引爆出一个叫 区块链 的公众热点 从技术角度而言 这并非新生事物 但因其巨大的
  • Linux网络服务管理&防火墙详解&端口问题

    每次配置访问服务器都会一团迷雾 今天来尝试弄清楚同时借鉴一下大佬的博文当做笔记 文章目录 防火墙简介 一 防火墙基础 二 iptables 防火墙策略 iptables 命令格式 iptables案例 1 查看开放的端口 2 开放端口 此处
  • 七、PXE高效批量网络装机

    七 PXE高效批量网络装机 PXE概述 PXE严格来说并不是一种安装方式 而是一种引导方式 进行 PXE 安装的必要条件是要安装的计算机中包含一个 PXE 支持的网卡 NIC 即网卡中必须要有 PXE Client PXE Pre boot
  • 如何在Linux系统上监测系统温度?(亲测可用)

    转载自 http os 51cto com art 201311 417208 htm 按理说 在大多数情况下 你用不着为电脑的运行温度而操心 除了制造瑕疵外 电脑硬件在设计时确保温度不会超过最高工作温度 但即使没有任何的硬件故障 也会由于
  • QT6源码编译全过程

    QT6源码编译全过程 windows环境下使用VS2019 QT6源码编译全过程 windows环境下使用VS2019 qt6 编译 刘亿辰的博客 CSDN博客 一 随记 QT作为一个跨平台的界面开发平台 经过了历史长河的洗礼以及一代代Qt
  • 【Windows系统】资源管理器右键卡顿案例

    问题 最近在使用办公电脑过程中 发现在Windows系统资源管理器中使用右键会出现卡顿现象 这是一台经常使用 工作日上班都会使用 以前没有这个问题 出现问题的环境 windows版本 win10 x64 22H2 解决方法 1 关闭映射到本
  • VUE之Echarts地图引入及配置项详解

    步骤 建立dom用于渲染地图组件 div style width 100 height 100 class map charts div 引入所需js文件 import echarts from echarts require echart
  • Unity中在场景中添加水资源效果的方法

    首先 导入系统自带的水资源包 鼠标右击Project视图中的Assets文件夹 在弹出来的列表中选择 Import Package gt Water Basic 然后 弹出一个 Importing package 窗口 自由选择其中的包 全
  • Python操作数据库

    pymysql模块简单实用 1 安装pymysql模块 pip3 install PyMySQL 2 建立连接 与MySQL服务端建立连接 conn pymysql connect host 127 0 0 1 ip port 3306 端
  • 因果模型五:用因果的思想优化风控模型——因果正则化评分卡模型

    因果模型五 用因果的思想优化风控模型 因果正则化评分卡模型 一 模型中的因果和相关 二 不可知样本选择偏差 三 因果推断 四 因果与评分卡的融合 五 模型效果评估 5 1 人工合成数据效果测试 5 2 YFCC100M图像数据测试 5 3
  • 高德地图打点获取点的坐标和名称

    一 首先引入地图 代码在最后 二 然后是打点获取坐标和名称的方法 代码在最后 重点 如果不加上密钥的话可能会得不到数据名称 你想要的代码来了 密钥 window AMapSecurityConfig securityJsCode 你申请ke
  • GraphPad Prism 9.2 Mac 2021最新安装使用教程

    GraphPad Prism集生物统计 化学统计 以及科技绘图于一身 其中医学所能用到的绘图需要它几乎都能满足 Prism 现在被各种生物学家以及社会和物理科学家广泛使用 超过110个国家的超过20万名科学家依靠 Prism 来分析 绘制和
  • SpringBoot学习遇到的问题(1) - 配置文件有日志的debug模式等配置项,为什么不起作用...

    这个问题困扰我近乎两天 通过查找N多资料后终于解决 写下来共享给大家 logging level root DEBUG 一系列的日志配置项 都不起作用的原因是springboot启动加载不到src main resources下的配置文件a
  • 那些踩过的declared implicitly的坑

    缺少头文件 我的本意是想做串口打印进行调试 于是我在usart c中重写了这两个函数 这里顺便记录下如何串口打印 usart c中 int fputc int ch FILE f HAL UART Transmit huart1 uint8
  • 2023计算机四非保研(复试:东北大学,成电,西电,浙软,中海洋,天大)

    文章目录 个人情况 夏令营情况 预推免情况 进入复试 中国海洋大学 学硕 浙大软院 专硕 天津大学智算 专硕 中科院网络中心 专硕 西电网安院 学硕 东北大学计算机 学硕 成电计算机 专硕 最终offer 感想 个人情况 本科学校 西北某四
  • firmware-mod-kit工具安装和使用说明

    一 firmware mod kit工具的安装 firmware mod kit工具的功能和binwalk工具的类似 其实firmware mod kit工具在功能上有调用binwalk工具提供的功能以及其他的固件解包工具的整合 下载fir
  • pp-human在rk3588上部署

    https github com leeguandong Yolov5 rknnlite2https github com leeguandong Yolov5 rknnlite2 这是我在paddledetection和rknn官方基础上
  • Jmeter使用JDBC对数据库压测

    背景说明 压测除了全链路压测外 有时候也需要对指定服务进行性能测试 这里以jmeter工具对数据库进行压测说明 压测不同数据库需要安装不同的数据库驱动 这里以mysql为例进行压测 步骤一 数据库驱动安装 1 进入mysql官网 根据不同m
  • 课程设计心得_关于switch输入字母进入死循环问题

    做C语言课程设计时 采用了大量的switch 在后期找bug时 当输入字符类型时 如a 之类的 程序进入了死循环 但又不想换成其他的 主要是懒 不想大量改动 void menu windows int n system cls fflush