当前位置:  开发笔记 > 编程语言 > 正文

打破输入.Scan()

如何解决《打破输入.Scan()》经验,为你挑选了1个好方法。

我有这个简单的代码来从控制台读取所有输入:

input := bufio.NewScanner(os.Stdin) //Creating a Scanner that will read the input from the console

for input.Scan() {
    if input.Text() == "end" { break } //Break out of input loop when the user types the word "end"
    fmt.Println(input.Text())
}

代码是有效的.我想要做的是摆脱if子句.在我对文档的理解中,如果一行是空的,input.Scan()则返回false,因此会脱离循环.

扫描将扫描仪推进到下一个令牌,然后可通过字节或文本方法使用该令牌.扫描停止时返回false,或者到达输入结束或出错.在Scan返回false之后,Err方法将返回扫描期间发生的任何错误,除非是,否则io.EOFErr将返回nil.如果拆分功能返回100个空标记而不提前输入,则扫描恐慌.这是扫描仪的常见错误模式.

我是否误解了文档,实际上有必要让这样的if子句突破?(我正在使用Go 1.5.2使用"go run"运行程序.)



1> Mickaël Rémo..:

我想你误解了文档.默认扫描仪是ScanLines功能.

文件说:

ScanLines是扫描仪的分割功能,它返回每行文本,去掉任何尾端行标记.返回的行可能为空.行尾标记是一个可选的回车符,后跟一个强制换行符.在正则表达式表示法中,它是\r?\n.即使没有换行,也会返回最后一个非空的输入行.

这里有两个要点:

返回行可能为空:表示返回空行.

即使没有换行,也会返回最后一个非空的输入行:这意味着如果文件的非最后一行,则总是返回该行.然而,这并不意味着空行结束了流.

扫描仪将在EOF(文件结束)上停止.例如,键入Ctrl-D将发送文件结束并停止扫描仪.


在Windows上,使用Ctrl-Z。
推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有