使用STDIN.gets时出现多行输入问题
看了这个问题后,我有以下代码:
$/ = " "
answer = STDIN.gets
现在,我希望这将允许用户:
输入多行输入,按Ctrl-D终止。
输入单行输入,按Ctrl-D终止。
输入“无”输入,按Ctrl-D终止。
但是,我实际看到的行为是:
用户可以输入多行输入。
除非按两次Ctrl-D,否则用户无法输入单行输入。
如果用户立即按下Ctrl-D,则可以输入“无”输入。
那么,为什么单行情况(即如果用户输入了一些文本但没有换行,然后按Ctrl-D)需要两次按下Ctrl-D?如果用户什么都不输入,为什么它会起作用呢? (我已经注意到,如果他们什么也没输入并且按下Ctrl-D,我就不会得到一个空字符串,但是nil类 - 我试图在结果上调用.empty?
时发现了这个,因为它突然失败了。如果有的话让它返回一个空字符串的方法,这将是很好的。我更喜欢检查.empty?
到==
,并且不特别想为nil类定义.empty?
。)
编辑:因为我真的想知道在Ruby中执行此操作的“正确方法”,我将提供200个代表的赏金。我也会接受一些答案,这些答案可以通过合理的“提交”程序进入终端多行输入 - 我将成为'合适'的判断者。例如,我们目前正在使用两个“ n”,但这不合适,因为它会阻止段落并且不直观。
没有找到相关结果
已邀请:
2 个回复
结乳
我不确定是否需要存储和恢复stty设置,但我已经看到其他人这样做了。
澳绍能
使用各种输入运行此代码的结果如下: - INPUT这是一行< CR>< Ctrl-D> | String |这是一行 | INPUT这是一行< Ctrl-D> | String |这是一行| INPUT<按Ctrl-d取代; |字符串||