R语言函数中readline跳过输入行问题及异步特性咨询
解决R函数中readline跳过第一个输入项的问题
哈哈,这个问题我之前也碰到过,完全不是什么异步问题,也和给变量赋值没关系——核心原因出在R的输出缓冲区刷新时机上!
你看,当你用cat("Hello! let's input some data")输出提示语后,R并不会立刻把这段文字打印到控制台,而是先存在输出缓冲区里。紧接着调用readline()的时候,缓冲区可能还没来得及把cat的内容刷到屏幕上,就直接进入了第一个输入环节。这时候你可能看不到第一个Input foo:的提示,误以为程序跳过了它,直接跳到了第二个输入项。
给你两个简单的修复方案:
方案一:给cat的内容加换行符
在cat的字符串结尾加上\n,这样R会自动刷新缓冲区,把提示语立刻显示出来:fun <- function(){ cat("Hello! let's input some data\n") x <- readline("Input foo: ") y <- readline("Input bar: ") z <- readline("Input baz: ") a <- readline("Input foobarbaz: ") } fun()方案二:手动刷新缓冲区
如果不想加换行,也可以在cat之后手动调用flush.console(),强制R把缓冲区里的内容输出到屏幕:fun <- function(){ cat("Hello! let's input some data") flush.console() x <- readline("Input foo: ") y <- readline("Input bar: ") z <- readline("Input baz: ") a <- readline("Input foobarbaz: ") } fun()
本质上是因为R的控制台输出默认是行缓冲模式,只有遇到换行符或者缓冲区满了才会触发输出刷新。你的cat没有换行,又紧跟着readline,就导致了提示不同步的问题,调整一下刷新时机就搞定啦!
内容的提问来源于stack exchange,提问作者iskandarblue
相关产品推荐
相关产品推荐

