精华内容
下载资源
问答
  • 做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;
        }
    }
    
    展开全文
  • 进入这个死循环其实是你的程序中配置好了某个中断,条件满足,中断发生了,但你的程序中并没有这个中断的服务函数。 __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(),这个也能临时解决这个问题,但是会影响其中断的使用。

    展开全文
  • 最近要把写的死循环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 bytes

    16065=255*63 因为每一个磁头都是在同一个柱面的,63表示每个磁道上的扇区数量,这两个数的乘积表示一个柱面上的扇区数量;所以16065*512表示一个柱面的大小是8225280字节
    Sector size (logical/physical): 512 bytes / 512 bytes
    表示一个扇区的大小是512字节

    总结:所以一个磁盘的大小=一个柱面大小*柱面的总数=磁头数量*每个磁道上的扇区数*一个扇区大小*柱面总数

    :磁盘大小=8225280*1305=10733990400bytes=9.99GB=255*63*512*1305
    上例中显示出我们的磁盘只有1305个柱面,但下边的分区信息中出现了1306个柱面数,不必太在意,linux显示的这些数据不会十分精确

    mount /dev/sdb1 /mnt/user1 将设备sdb1挂载到/mnt/juser1

    ftp 192.168.X.X 连接ip为192.168.X.X的ftp服务器

    binary (ftp)以二进制传递数据

    get test.jar (ftp)从ftp服务器下载test.jar


    展开全文
  • Java使用在编写获取用户正确输入的逻辑代码,采用循环读取来正确获取,其中使用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训练分类器,发现训练到最后误检率很低分类器总是卡到某一层就不在继续进行,像是进入死循环程序代码与参数输入应该是没有任何问题的,所以我从网上找这方面的资料,最后在...
  • #循环结构(2种) while for # 1. while循环:多次循环,条件为真(True),则会运行循环语句,直到条件结果为假... a+=1# 防止while进入死循环,若不加入这句的话,a<10是永远成立的,就会循环打印1 prin...
  • vs2017开发桌面应用程序,点击按键处理耗时任务,比如一个按钮按下进入循环处理,另外一个按钮按下,退出循环,当进入循环时,界面会卡,不能进行操作 解决方法: 1、创建窗口消息处理函数: void DoEvents() {...
  • Kubernetes Pod反复死亡( CrashLoopBackOff ),此Kubernetes控制器会通知您,同时提供诸如退出代码和日志之类的其他信息。 这是我第一次尝试编写Kubernetes控制器,如果您有任何反馈意见,请提出一个问题。 ...
  • 当程序进入死循环时,ctrl+c:强行结束。 001 一行可以书写多个语句,用分号隔开 >>> print("a");print("b") a b 一行过长的语句可以用反斜杠或者括号分解成几行 >>> 3>4 and \ 2>1 False >>> 3>0 ...
  • while循环结构格式:while 表达式...说明:表达式:也叫循环条件语句块:也叫循环体死循环:循环条件一直成立break:跳出循环continue:结束本次循环,进入下次循环else:对应的语句块,循环正常退出会执行,非正常...
  • Python之循环结构

    2020-12-25 02:56:12
    执行流程:当程序执行到while语句,首先判断表达式的真假。若表达式的值为真,则执行缩进的语句块,之后返回表达式继续判断;若表达式的值为假,则跳过缩进的语句块执行。 说明: 表达式:也叫循环条件 语句块:...
  • python之循环结构

    2018-12-28 20:20:09
    执行流程:当程序执行到while语句,首先判断表达式的真假。若表达式的值为真,则执行缩进的语句块,之后返回表达式继续判断;若表达式的值为假,则跳过缩进的语句块执行。 说明: 表达式:也叫循环条件 语句块:...
  • 当程序执行到while语句,首先判断表达式的真假。若表达式的值为真,则执行缩进的语句块,然后返回表达式继续判断其真假,直到表达式的是为假,结束循环;若表达式的值为假,则跳过循环。 使用说明 表达式:也叫...
  • 最近在学习QT,遇到了一点问题,是关于工作线程与UI线程的,其主要问题为:我的工作线程是一个死循环我点击按钮进入工作线程,我的工作线程用emit发送一个信号,通知UI界面发生改变但是我遇到了如下异常。...
  • Python 捕捉Ctrl+C退出脚本程序

    千次阅读 2020-02-19 15:01:36
    我们的脚本程序进入死循环或者卡在某个耗时操作,需要退出程序,一般都是使用Ctrl+C来杀死进程,那么,如何在程序里进行这个操作呢?实际上,在命令行输入Ctrl+C的原理是触发了 SIGINT 信号,所以我们需要捕捉这...
  • 当程序进入死循环或者由于其他原因无法自行终止的时候,就需要强制退出程序了。  对于开发软件 Eclipse ,在程序执行超时后,可以点击 Terminate 按钮强制退出。  那么,我们可不可以通过程序设置一定的时间,当...
  • 执行流程:当程序执行到while语句,首先判断表达式的真假。若表达式的值为真,则执行缩进的语句块,之后返回表达式继续判断;若表达式的值为假,则跳过缩进的语句块执行。 说明: 表达式:也叫循环条件 语句块...
  • 当程序进入死循环或者由于其他原因无法自行终止的时候,就需要强制退出程序了。 对于开发软件 Eclipse ,在程序执行超时后,可以点击 Terminate 按钮强制退出。 那么,我们可不可以通过程序设置一定的时间,当程序...
  • 当程序进入死循环或者由于其他原因无法自行终止的时候,就需要强制退出程序了。  对于开发软件 Eclipse ,在程序执行超时后,可以点击 Terminate 按钮强制退出。  那么,我们可不可以通过程序设置一定的时间,当...
  • 2月19日直播技术问题老师已解答,如有问题也可以留言区提问。扫码免费听直播课扫码免费听课问:多个排队怎么区分... 答:要与初始化程序隔开问:进入死循环,这个中断程序怎么返回呢? 答:有相应的返回指令...
  • 当程序进入死循环或者由于其他原因无法自行终止的时候,就需要强制退出程序了。 对于开发软件 Eclipse ,在程序执行超时后,可以点击Terminate 按钮强制退出。 那么,我们可不可以通过程序设置一定的时间,当程序...
  • 答:要与初始化程序隔开问:进入死循环,这个中断程序怎么返回呢?答:有相应的返回指令,也可以用跳转指令问:中断程序里面是什么啊?答:中断程序里是对BOOL量的赋值问:TCP编程服务器程序需要...
  • 1. 开启服务,在服务中开启一个死循环,这个死循环用来检测当前访问的程序是不是被加锁的程序,如果是则弹出输入密码对话框。这里采用数据库来保存被加锁的程序。 2. 密码被保存在xml 中,如果
  • 但是,当进入别的进程后,若该进程告诉系统它现在不需要做什么,不需要那么多的时间,这个时候,系统就会切换到下一个进程,切换到死循环所在进程后,由于它一直在循环,永远告诉系统它有事情做(实质仅在死...
  • 但是,当进入别的进程后,若该进程告诉系统它现在不需要做什么,不需要那么多的时间,这个时候,系统就会切换到下一个进程,切换到死循环所在进程后,由于它一直在循环,永远告诉系统它有事情做(实...
  • 程序CPU占用高的可能原因: ...但是,当进入别的进程后,若该进程告诉系统它现在不需要做什么,不需要那么多的时间,这个时候,系统就会切换到下一个进程,切换到死循环所在进程后,...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 153
精华内容 61
关键字:

当程序进入死循环时