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

reader.ReadString不会去除首次出现的delim

孔君浩
2023-03-14
问题内容

我写了一个简单的go程序,它不能正常运行:

package main

import (
    "bufio"
    "fmt"
    "os"
)

func main() {
    reader := bufio.NewReader(os.Stdin)
    fmt.Print("Who are you? \n Enter your name: ")
    text, _ := reader.ReadString('\n')
    if aliceOrBob(text) {
        fmt.Printf("Hello, ", text)
    } else {
        fmt.Printf("You're not allowed in here! Get OUT!!")
    } 
}

func aliceOrBob(text string) bool {
    if text == "Alice" {
        return true
    } else if text == "Bob" {
        return true
    } else {
        return false
    }
}

它应该要求用户说出它的名字,如果他是爱丽丝还是鲍勃,则向他打招呼,否则告诉他离开。问题是,即使输入的名称是Alice或Bob,它也会告诉用户离开。

爱丽丝:

/usr/lib/golang/bin/go run /home/jcgruenhage/go/workspace/src/github.com/jcgruenhage/helloworld/greet/greet.go
Who are you? 
Enter your name: Alice
You're not allowed in here! Get OUT!!
Process finished with exit code 0

鲍勃:

/usr/lib/golang/bin/go run /home/jcgruenhage/go/workspace/src/github.com/jcgruenhage/helloworld/greet/greet.go
Who are you? 
Enter your name: Bob
You're not allowed in here! Get OUT!!
Process finished with exit code 0

问题答案:

这是因为您text正在存储Bob\n

解决此问题的一种方法是使用strings.TrimSpace修剪换行符,例如:

import (
    ....
    "strings"
    ....
)

...
if aliceOrBob(strings.TrimSpace(text)) {
...

另外,您也可以使用ReadLine代替ReadString,例如:

...
text, _, _ := reader.ReadLine()
if aliceOrBob(string(text)) {
...

之所以string(text)需要,是因为ReadLine将返回byte[]而不是string



 类似资料:
  • 本文向大家介绍Python中首次出现真数,包括了Python中首次出现真数的使用技巧和注意事项,需要的朋友参考一下 在本文中,我们需要在给定的数字列表中找到第一个出现的非零数字。 与枚举和下一个 我们起诉枚举以获取所有元素的列表,然后应用下一个函数以获取第一个非零元素。 示例 输出结果 运行上面的代码给我们以下结果- 与下一个和过滤器 将next和filter条件以及lambda表达式应用于条件不

  • 问题内容: 我在numpy中有一个1D数组,我想在值超过numpy数组中的值的位置找到索引的位置。 例如 查找超出值的位置。 问题答案: 这有点快(看起来更好) 因为将在第一个位置停止(“如果多次出现最大值,则返回对应于第一个出现的索引。”)并且不会保存其他列表。

  • 问题内容: 假设我有一张桌子: 我插入一些行: 因此,我最终得到了一个类似于以下内容的表: 我该如何选择每组相同数字的第一个日期,所以我得到了以下结果: 我整天大部分时间都在忙着子查询之类的事情,由于某种原因,我似乎无法破解它。我敢肯定某个地方有一个简单的方法! 我可能想从结果中排除0,但目前并不重要。 问题答案: 修订日期:2011年1月15日 我敢肯定某个地方有一个简单的方法! 就在这里。但是

  • 本文向大家介绍js去除字符串首尾空格?相关面试题,主要包含被问及js去除字符串首尾空格?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 使用正则(^\s)|(\s$)即可

  • 问题内容: 在SQL Server中,我试图计算自过去5天首次观察到与今天相同的天气(今天假设是2018年8月6日)以来的天数。每个镇。 数据如下: 这需要执行得很好,但到目前为止,我只想针对每个镇进行单个查询(并且将会有数十个镇,而不仅仅是四个镇)。这行得通,但不会扩展。 这是多伦多的那个… …正确返回4,因为今天有雨,而过去5天内第一次下雨是8月3日。 但是我想要返回的是一个像这样的表: 这怎