当前位置: 首页 > 面试题库 >

突破输入.Scan()

孟新知
2023-03-14
问题内容

我有以下简单代码可从控制台读取所有输入:

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,因此会跳出循环。

扫描将扫描程序前进到下一个令牌,然后可以通过Bytes或Text方法使用该令牌。当扫描停止时(到达输入末尾或发生错误),它返回false。在Scan返回false之后,Err方法将返回在扫描过程中发生的任何错误,除非是io.EOF,则Err将返回nil。如果split函数在不提前输入的情况下返回100个空令牌,则扫描恐慌。这是扫描仪的常见错误模式。

我是否误解了文档,实际上有必要制定这样的前提条件吗?(我正在使用Go 1.5.2使用“ go run”运行程序。)


问题答案:

我认为您误读了文档。默认扫描仪为ScanLines功能。

文档说:

ScanLines是Scanner的拆分功能,它返回每行文本,并删除所有行尾标记。返回的行可能为空。行尾标记是一个可选的回车符,后跟一个强制换行符。在正则表达式中为\r?\n。即使没有换行符,也将返回输入的最后一个非空行。

这里有两个要点:

  • 返回行可能为空 :表示返回空行。
  • 即使没有换行符,也将返回输入的最后一个非空行 :这意味着如果文件的最后一行非空,则总是返回该行。但是,这并不意味着空行将结束流。

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



 类似资料:
  • 问题内容: 递归是一种“分而治之”的样式,它在变小的同时会拆分(Tree数据结构),如果发现违规,我希望它完全中断,这意味着中断所有递归路径并返回true。这可能吗? 问题答案: 您可以返回错误代码,或修改一些全局变量,以便每个递归实例都知道可以“杀死自己”。 某种东西。

  • 问题内容: 有没有比抛出异常更简单的方法来摆脱嵌套循环?(在Perl中,您可以给每个循环加上标签,至少可以继续一个外部循环。) 即,有没有比以下更好的方法: 问题答案: 至少有人建议,但也拒绝了。我认为没有其他方法,只需重复测试或重新组织代码即可。有时有点烦人。 范·罗瑟姆(van Rossum)先生在拒绝消息中提到使用,这确实很明智,我需要个人记住这一点。:)

  • 我正在创建一个突破游戏,我之前在这里问了一个问题,但没有提出解决方案。我有一个简单的物理过程来反转球与桨碰撞时的速度。但我需要实现一个更先进的物理系统,例如,当球击中桨的左侧和右侧时,等等。。。但我该如何计算碰撞后球的方向呢?突破的标准是在与球拍左侧碰撞时将球指向左侧,如果碰撞是向右的,则指向右侧,等等。。。 我如何计算在哪里击球?我有很多变量可以使用,比如桨叶的各个方面(宽度、高度、X位置)、球

  • 前面说过, 一台普通计算机的TPS 理论上限约为7千TPS。 如果要让整个系统的TPS更高,一种方式是使用高性能的计算机,另一种就是将单计算机处理改为多计算机处理。 本系统使用多链方式,链与链可以并行处理,所以可以将不同的链的处理放到不同的计算机上,实现并行处理,避免单节点的硬件、网络等瓶颈。 这样就能够做到系统性能根据链的增加而线性增长。 如果某个节点性能不足,可以新增一个计算机,将部分链的处理

  • 问题内容: 在我的代码中,我有一个for循环,迭代一个代码方法,直到满足for条件为止。 反正有没有打破这个for循环? 因此,如果我们看下面的代码,如果我们想在达到“ 15”时打破这个for循环,该怎么办? 我尝试了以下无济于事: 我尝试了一个循环: 我可以实现我想要的唯一方法是打破for循环,我不能暂时将其替换,如果要使用if语句。 编辑: 仅作为示例提供了此代码,这不是我试图将其实现的代码。

  • 我目前正在尝试使用java和libgdx制作一个突破性的克隆。我现在很难让球以合适的角度从挡块上弹起。简而言之,我遇到的问题是,球每帧移动12个像素,并不总是与砖的边缘对齐。如果有人对更好的移动球的方法或其他检查碰撞的方法有任何建议,我们将不胜感激! 主要游戏类 Ball类 砖块代码以防万一