-
课程设计心得_关于switch输入字母进入死循环问题
2020-06-03 19:02:38做C语言课程设计时,采用了大量的switch,在后期找bug时,当输入字符类型时,如a,*,+之类的,程序进入了死循环,但又不想换成其他的(主要是懒,不想大量改动) void menu_windows() { int n; system("cls"); ...做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; } }
-
STM8L052 进入死循环__iar_unhandled_exception
2018-08-29 11:26:37进入这个死循环其实是你的程序中配置好了某个中断,当条件满足时,中断发生了,但你的程序中并没有这个中断的服务函数。 __iar_unhandled_exception: 0084DA 9D NOP 0084DB 20FD JRA __iar_unhandled_exception ...进入这个死循环其实是你的程序中配置好了某个中断,当条件满足时,中断发生了,但你的程序中并没有这个中断的服务函数。
__iar_unhandled_exception: 0084DA 9D NOP 0084DB 20FD JRA __iar_unhandled_exception
解决方法:
1.在程序中找到是哪个中断被配置了,如果这个中断不需要直接关掉它的中断使能。
2.若果这个中断是你需要的就正确的实现它对应中断服务函数,我就是没有正确实现对应的中断服务函数导致进入这个死循环。
3.直接关闭总中断disableInterrupts(),这个也能临时解决这个问题,但是会影响其中断的使用。
-
linux运行自启动死循环java程序 及 必须注意的问题
2015-03-02 16:17:42最近要把写的死循环java程序放到板载单用户的Linux下,结果直接在etc/rc1.d目录中使用java -jar test.jar自启动造成命令行阻塞无法继续操作,最终利用另一个板载Linux系统引导进入后挂载原来的板子后修改java -jar ...最近要把写的死循环java程序放到板载单用户的Linux下,结果直接在etc/rc1.d目录中使用java -jar test.jar自启动造成命令行阻塞无法继续操作,最终利用另一个板载Linux系统引导进入后挂载原来的板子后修改java -jar test.jar&后成功。
经验:在Linux中,当在前台运行某个作业时,终端被该作业占据;而在后台运行作业时,它不会占据终端。可以使用&命令把作业放到后台执行。实际上这样是将命令放入到一个作业队列中了。
相关命令:
fdisk -l显示信息详解
[root@www.linuxidc.com ~]# fdisk -l
Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00044938
Device Boot Start End Blocks Id System
/dev/sda1 * 1 638 5120000 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 638 893 2048000 83 Linux
Partition 2 does not end on cylinder boundary.
/dev/sda3 893 1020 1024000 82 Linux swap / Solaris
Partition 3 does not end on cylinder boundary.
/dev/sda4 1020 1306 2292736 5 Extended
/dev/sda5 1021 1306 2291712 83 Linux解析:
Disk /dev/sda: 10.7 GB, 10737418240 bytes
块设备名称为/dev/sda,此设备的大小为10.7GB,这个数字不是特别精确,我系统是10GB;10737418240 bytes这是转换成字节后的大小,即:10737418240/1024/1024/1024=10GB (注:bytes=B,表示“字节”,bit=b,表示“位”)
255 heads, 63 sectors/track, 1305 cylinders
255 heads:表示磁头数为255
63 sectors/track:表示每磁道上有63个扇区
1305 cylinders:表示共有1305个柱面,柱面是分区的最小单位
Units = cylinders of 16065 * 512 = 8225280 bytes16065=255*63 因为每一个磁头都是在同一个柱面的,63表示每个磁道上的扇区数量,这两个数的乘积表示一个柱面上的扇区数量;所以16065*512表示一个柱面的大小是8225280字节
Sector size (logical/physical): 512 bytes / 512 bytes
表示一个扇区的大小是512字节总结:所以一个磁盘的大小=一个柱面大小*柱面的总数=磁头数量*每个磁道上的扇区数*一个扇区大小*柱面总数
即:磁盘大小=8225280*1305=10733990400bytes=9.99GB=255*63*512*1305
mount /dev/sdb1 /mnt/user1 将设备sdb1挂载到/mnt/juser1
上例中显示出我们的磁盘只有1305个柱面,但下边的分区信息中出现了1306个柱面数,不必太在意,linux显示的这些数据不会十分精确ftp 192.168.X.X 连接ip为192.168.X.X的ftp服务器
binary (ftp)以二进制传递数据
get test.jar (ftp)从ftp服务器下载test.jar
-
Java:使用try/catch捕捉InputMismatchException造成死循环
2020-03-19 13:25:19Java使用在编写获取用户正确输入的逻辑代码时,采用循环读取来正确获取,其中使用try/catch语句捕捉InputMismatchException,当用户出现错误输入时,程序进入死循环,不再阻塞等待用户输入。 相关代码如下 Scanner ...问题描述
Java使用在编写获取用户正确输入的逻辑代码时,采用循环读取来正确获取,其中使用try/catch语句捕捉InputMismatchException,当用户出现错误输入时,程序进入死循环,不再阻塞等待用户输入。
相关代码如下Scanner ipt = new Scanner(System.in); boolean input_Right = false; do{ try{ System.out.println("Please enter an Integer:"); int integer_1 = ipt.nextInt(); System.out.println("Please enter next Integer:"); int integer_2 = ipt.nextInt(); input_Right = true; }catch(Exception e){ System.out.println("Wrong format."); } }while(!input_Right);
程序输入正常的整数,运行正常。
程序输入错误的数,比如浮点数,一直输出Wrong format.和Please enter an Integer问题剖析
出现这个问题,我们可以从输出入手。一直输出这两个字符串,说明进入了catch同时也运行了System.out.println(“Please enter an Integer:”);。这里能够初步判断是输入缓冲区没有处理或者忽略错误的输入,导致第一个*nextInt()*一直获取错误的输入,从而被catch,input_Right无法变为true,进而形成死循环。java8帮助手册中也有相关的描述。Scanner类中的偏上面的部分
When a scanner throws an InputMismatchException, the scanner will not
pass the token that caused the exception, so that it may be retrieved
or skipped via some other method.这也就解释了,为什么如果不进行retrieve(重新获取)或者skipped(忽略,跳过)的话错误的输入会一直存在,从而死循环。
解决方法
弄清楚原因后,自然能够解决了。
方法1:重新获取
重新获取,但是仅仅是把数据从缓冲区取出来。并不对数据进行处理。使用Scanner的next()方法就能够解决。
具体如下Scanner ipt = new Scanner(System.in); do{ try{ ... ... }catch(Exception e){ ipt.next(); System.out.println("Wrong format."); } }while(!input_Right);
方法2:清空缓冲区(推荐方法)
将上一个Scanner关闭,新建一个Scanner实例
帮助手册中When a Scanner is closed, it will close its input source if the source implements the Closeable interface.
也就是说,一个Scanner关闭后,他的输入源将会关闭,里面的数据将会清空。
具体如下:Scanner ipt = new Scanner(System.in); do{ try{ ... ... }catch(Exception e){ ipt = new Scanner(System.in); System.out.println("Wrong format."); } }while(!input_Right);
-
opencv Haartraining级联分类器 死循环
2014-12-20 04:13:22最近在做人脸检测的Haartraining训练分类器,发现训练到最后误检率很低时分类器总是卡到某一层就不在继续进行,像是进入了死循环,程序代码与参数输入应该是没有任何问题的,所以我从网上找这方面的资料,最后在... -
python3 笔记9.程序流程结构--循环结构(while,for)
2018-10-17 22:59:28#循环结构(2种) while for # 1. while循环:多次循环,当条件为真(True)时,则会运行循环语句,直到条件结果为假... a+=1# 防止while进入死循环,若不加入这句的话,a<10是永远成立的,就会循环打印1 prin... -
vs2017桌面程序 处理耗时任务界面卡死
2019-10-16 16:51:28vs2017开发桌面应用程序,点击按键处理耗时任务,比如一个按钮按下进入循环处理,另外一个按钮按下,退出循环,当进入循环时,界面会卡死,不能进行操作 解决方法: 1、创建窗口消息处理函数: void DoEvents() {... -
k8s-crash-informer:如果带注释的部署进入崩溃循环,则通知Mattermost或Slack通道-源码
2021-02-03 01:25:27当Kubernetes Pod反复死亡( CrashLoopBackOff )时,此Kubernetes控制器会通知您,同时提供诸如退出代码和日志之类的其他信息。 这是我第一次尝试编写Kubernetes控制器,如果您有任何反馈意见,请提出一个问题。 ... -
零基础入门学习Python学习笔记第四讲【短路逻辑】
2018-01-31 18:11:10当程序进入死循环时,ctrl+c:强行结束。 001 一行可以书写多个语句,用分号隔开 >>> print("a");print("b") a b 一行过长的语句可以用反斜杠或者括号分解成几行 >>> 3>4 and \ 2>1 False >>> 3>0 ... -
python循环结构语句实现_Python之循环结构
2020-12-30 01:09:47while循环结构格式:while 表达式...说明:表达式:也叫循环条件语句块:也叫循环体死循环:循环条件一直成立break:跳出循环continue:结束本次循环,进入下次循环else:对应的语句块,循环正常退出时会执行,非正常... -
Python之循环结构
2020-12-25 02:56:12执行流程:当程序执行到while语句时,首先判断表达式的真假。若表达式的值为真,则执行缩进的语句块,之后返回表达式继续判断;若表达式的值为假,则跳过缩进的语句块执行。 说明: 表达式:也叫循环条件 语句块:... -
python之循环结构
2018-12-28 20:20:09执行流程:当程序执行到while语句时,首先判断表达式的真假。若表达式的值为真,则执行缩进的语句块,之后返回表达式继续判断;若表达式的值为假,则跳过缩进的语句块执行。 说明: 表达式:也叫循环条件 语句块:... -
python学习笔记第四天循环结构
2021-01-20 03:18:08当程序执行到while语句时,首先判断表达式的真假。若表达式的值为真,则执行缩进的语句块,然后返回表达式继续判断其真假,直到表达式的是为假,结束循环;若表达式的值为假,则跳过循环。 使用说明 表达式:也叫... -
QT/C++ 多线程时,工作界面的样式频繁改变导致程序奔溃的问题
2020-12-04 10:05:49最近在学习QT,遇到了一点问题,是关于工作线程与UI线程的,其主要问题为:我的工作线程是一个死循环,当我点击按钮进入工作线程,我的工作线程用emit发送一个信号,通知UI界面发生改变但是我遇到了如下异常。... -
Python 捕捉Ctrl+C退出脚本程序
2020-02-19 15:01:36当我们的脚本程序进入死循环或者卡在某个耗时操作,需要退出程序时,一般都是使用Ctrl+C来杀死进程,那么,如何在程序里进行这个操作呢?实际上,在命令行输入Ctrl+C的原理是触发了 SIGINT 信号,所以我们需要捕捉这... -
Java程序运行超时后退出或进行其他操作的实现
2017-07-04 14:32:00当程序进入死循环或者由于其他原因无法自行终止的时候,就需要强制退出程序了。 对于开发软件 Eclipse ,在程序执行超时后,可以点击 Terminate 按钮强制退出。 那么,我们可不可以通过程序设置一定的时间,当... -
03-python基础知识-循环结构
2018-12-26 17:58:12执行流程:当程序执行到while语句时,首先判断表达式的真假。若表达式的值为真,则执行缩进的语句块,之后返回表达式继续判断;若表达式的值为假,则跳过缩进的语句块执行。 说明: 表达式:也叫循环条件 语句块... -
【Java】Java程序运行超时后退出或进行其他操作的实现
2013-07-26 01:31:30当程序进入死循环或者由于其他原因无法自行终止的时候,就需要强制退出程序了。 对于开发软件 Eclipse ,在程序执行超时后,可以点击 Terminate 按钮强制退出。 那么,我们可不可以通过程序设置一定的时间,当程序... -
【Java程序运行超时后退出或进行其他操作的实现】
2013-09-23 09:36:53当程序进入死循环或者由于其他原因无法自行终止的时候,就需要强制退出程序了。 对于开发软件 Eclipse ,在程序执行超时后,可以点击 Terminate 按钮强制退出。 那么,我们可不可以通过程序设置一定的时间,当... -
中断程序_【技成周报24期】abb机器人中断程序,MCGS触摸屏,Visual Studio等问题解答...
2021-01-15 10:28:502月19日直播技术问题老师已解答,如有问题也可以留言区提问。扫码免费听直播课扫码免费听课问:多个排队怎么区分... 答:当要与初始化程序隔开时问:进入死循环,这个中断程序怎么返回呢? 答:有相应的返回指令... -
Java学习笔记——Java程序运行超时后退出或进行其他操作的实现
2013-07-26 18:22:00当程序进入死循环或者由于其他原因无法自行终止的时候,就需要强制退出程序了。 对于开发软件 Eclipse ,在程序执行超时后,可以点击Terminate 按钮强制退出。 那么,我们可不可以通过程序设置一定的时间,当程序... -
ykhmi是什么触摸屏软件_常见问题,abb机器人中断程序,MCGS触摸屏等
2020-12-30 00:31:57答:当要与初始化程序隔开时问:进入死循环,这个中断程序怎么返回呢?答:有相应的返回指令,也可以用跳转指令问:中断程序里面是什么啊?答:中断程序里是对BOOL量的赋值问:TCP编程时服务器程序需要... -
Android之世面上程序锁的实现
2014-07-30 13:27:161. 开启服务,在服务中开启一个死循环,这个死循环用来检测当前访问的程序是不是被加锁的程序,如果是则弹出输入密码对话框。这里采用数据库来保存被加锁的程序。 2. 密码被保存在xml 中,如果 -
c#Winform程序CPU占用高的原因和解决方法
2018-04-28 13:02:48但是,当进入别的进程后,若该进程告诉系统它现在不需要做什么,不需要那么多的时间,这个时候,系统就会切换到下一个进程,当切换到死循环所在进程后,由于它一直在循环,永远告诉系统它有事情做(实质仅在死... -
C# Winform程序CPU占用高的原因和解决方法
2018-12-24 11:29:00但是,当进入别的进程后,若该进程告诉系统它现在不需要做什么,不需要那么多的时间,这个时候,系统就会切换到下一个进程,当切换到死循环所在进程后,由于它一直在循环,永远告诉系统它有事情做(实... -
c#Winform程序CPU占用高的原因和解决方法(转载)
2019-05-06 15:02:00程序CPU占用高的可能原因: ...但是,当进入别的进程后,若该进程告诉系统它现在不需要做什么,不需要那么多的时间,这个时候,系统就会切换到下一个进程,当切换到死循环所在进程后,...
-
串口传图像(串口摄像头),OV7670采集.bmp格式照片,通过串口传到上位机显示.rar
-
华为公有云交付项目整体介绍.pptx
-
3389端口抓鸡工具
-
采集悟空问答的爬虫gj
-
2021-02-27
-
设计模式简介
-
C++代码规范和Doxygen根据注释自动生成手册
-
PKI双证书机制及其产生过程
-
鸿蒙系统Harmonyos源码架构分析-第1期第2课
-
RestfulApi服务端.zip
-
Mycat 实现 MySQL的分库分表、读写分离、主从切换
-
安卓手机节拍器
-
基于电商业务的全链路数据中台落地方案(全渠道、全环节、全流程)
-
6.按键复用.rar
-
Web安全测试操作指导书_华为v1.0.doc
-
牛牛量化策略交易
-
libFuzzer视频教程
-
智能停车场云平台(附vue+SpringBoot前后端项目源码)
-
2.中断延时.rar
-
23弱口令爆破 效率极高