键盘输入字符并输出,在多次循环时,如果有时间等待或者阻塞,此时还没提示让输入字符时,依然可以敲击键盘输入字符,输入回车后会把字符存入输入缓冲区,下次循环会直接从输入缓冲区读取数据,跳过键盘的输入。

现象:java,Python,shell都会出现,应该是系统对输入的原理就是这样。

1.java举例

//代码举例Scanner sc  =  new Scanner(System.in);while (true){System.out.print("请输入:");String str  =  sc.next();System.out.println(str);Thread.sleep(5000);}//在第一次输入后,sleep过程中输入一些字符串并敲回车
//下次循环,会直接读取输入缓存区的数据,而不会再等键盘的输入。
//输出
请输入:a
a
b  //sleep过程中输入的值
请输入:b    //这个是输出的结果,其实并不想要
请输入:

2.python举例

#代码举例
import time
while True:a = input("请输入:")print(a)time.sleep(5)

3.shell举例

#!/bin/bash
while :
doread  -p  "请输入:"  aecho $asleep 5
done

解决方案

1、下次输入前清楚输入缓存区(小遍不会,C语言得补一补了)

2、在键盘输入命令前记录下时间戳,在键盘输入命令后再记录一个时间,计算这两个时间的差值,如果时间很段直接continue来重新获取键盘的输入。在此时小编发现输入缓冲区是以回车来记录次数的,所以continue比较合适,多次回车可能会有多次continue。

java程序举例:

        Scanner sc = new Scanner(System.in);long l1 = System.currentTimeMillis();while (true){System.out.println("请输入:");l1=System.currentTimeMillis();String str = sc.next();l1=System.currentTimeMillis() - l1;if (l1 <50){continue;}System.out.println(l1);System.out.println(str);Thread.sleep(5000);}

python程序举例:

import time
while True:t1=time.time()a=input("请输入:")t1=time.time() - t1if (t1<0.05):continueprint(a)time.sleep(5)

shell程序举例:(该程序有个bug,在输入前后之间刚好要切换秒的时候)
解决这个bug请自行百度:shell毫秒时间戳。

#!/bin/bash
while :
dot1=$(date +%s)read -p "请输入:" at2=$(date +%s)let t3=t2-t1if [ $t3 -lt 1 ]thencontinuefiecho $t3echo $asleep 5
done

输入缓冲区对程序的影响及解决方法(多种语言都会出现)相关推荐

  1. 计算机程序无法运行,win7电脑程序打不开解决方法

    win7电脑程序打不开,很多win7系统的用户都遇到类似的问题,很多网友都不知道这么处理这样的问题,都在网上找一大堆的解决方法,找到焦头烂额,不要怕,小编告诉你们win7电脑程序打不开解决方法,小编教 ...

  2. 'webpack-dev-server' 不是内部或外部命令,也不是可运行的程序 或批处理文件的解决方法(webpack热加载)

    [README]webpack-dev-server 是一个支持热编译的服务器(动态编译) [1]问题 'webpack-dev-server' 不是内部或外部命令,也不是可运行的程序 或批处理文件的 ...

  3. win10系统cmd模式下输入python弹出Windows应用商店 解决方法

    win10系统cmd模式下输入python弹出Windows应用商店 解决方法 解决方法1: 打开环境变量设置[此电脑->属性->高级系统设置->环境变量] 在变量Path中发现有% ...

  4. “不允许对64位应用程序进行修改”的解决方法 --“Changes to 64-bit applications are not allowed.”

    "不允许对64位应用程序进行修改"的解决方法 --"Changes to 64-bit applications are not allowed." 参考文章: ...

  5. PHP上传文件大小限制问题 post_max_size对大小的影响及解决方法

    PHP上传文件大小限制问题 post_max_size对大小的影响及解决方法 参考文章: (1)PHP上传文件大小限制问题 post_max_size对大小的影响及解决方法 (2)https://ww ...

  6. Spark程序运行常见错误解决方法以及优化

    Spark程序运行常见错误解决方法以及优化 参考文章: (1)Spark程序运行常见错误解决方法以及优化 (2)https://www.cnblogs.com/double-kill/p/901238 ...

  7. KEIL设置程序起始地址无效解决方法,STM32 IAP程序起始地址

    关键词: KEIL设置程序起始地址无效解决方法 STM32 IAP设置程序起始地址 KEIL设置程序起始地址 MDK设置程序起始地址 KEIL设置ROM地址无效 碰到的问题:为了实现STM32升级固件 ...

  8. “'react-scripts' 不是内部或外部命令,也不是可运行的程序或批处理文件。”解决方法

    TRUFFLE框架下运行React app时报错"'react-scripts' 不是内部或外部命令,也不是可运行的程序或批处理文件."解决方法 使用truffle盒子react进 ...

  9. 格式工厂 由于应用程序配置不正确,应用程序未能启动的解决方法

    由于应用程序配置不正确,应用程序未能启动"的解决方法(格式工厂FFSetup260) 前几天,安装格式化工厂时遇到的一个问题,后来安装了一个补丁(也就是下面这个补丁: Microsoft V ...

最新文章

  1. 提到“子类”和“子类型”是不同的
  2. 【Verilog HDL 训练】第 03 天
  3. make 编译可执行
  4. go语言基础到提高(12)-函数类型与函数变量
  5. Perl之 用Net::FTP来上传下载文件
  6. Swift - 操作表(UIActionSheel)的用法,也叫底部警告框
  7. 【转】 Android常用实例—Alert Dialog的使用
  8. 7. Shell 脚本编写
  9. CCF201409-5 拼图(100分)【插头DP+状态压缩】
  10. 浏览器兼容之旅的第二站:各浏览器的Hack写法
  11. 自适应滤波器5-最小二乘法(LSM)
  12. 专利分析:数字人民币的“双离线”支付问题
  13. BottomNavigationView动态添加MenuItem
  14. 实验三 循环程序设计
  15. 2022年HGAME中REVERSE的Flag Checker
  16. 百度地图离线开发需求介绍
  17. 让我在这枯燥的实验室机房里,告诉你们什么是嵌入式软件开发
  18. Python学习出来好找工作吗?好找工作的关键是什么?
  19. windows之关闭thinkpad的默认fn功能键
  20. linux清除僵尸进程,如何清理和避免linux系统僵尸进程

热门文章

  1. 一起学习C语言:数组(二)
  2. ubuntu编译ubus及相关依赖库
  3. pytorch4:简单的线性回归
  4. python 科学计算设计_《Python科学计算-(第2版)》怎么样_目录_pdf在线阅读 - 课课家教育...
  5. 【Swin Transformer Block】的整体流程如下:
  6. tf.assign() 更新ref通过给它重新赋值
  7. [弹性力学]应力转轴公式和应变转轴公式的展开式
  8. vue+axios+qs序列化 “三步解析”【含demo实例】- 代码篇
  9. element-UI栅格系统缩放,导致页面布局效果bug? 叠加?错位?
  10. input文本框自动填充背景色黄色解决办法