为了账号安全,请及时绑定邮箱和手机立即绑定

从标准输入读取行直到特定字符

从标准输入读取行直到特定字符

Go
慕森卡 2021-05-13 14:09:48
我正在学习围棋。我的程序应该从stdin读取数据,直到我输入一个单句点的行。package mainimport (  "os"  "fmt"  "bufio")func main(){  in    := bufio.NewReader(os.Stdin)  input := ""  for input != "." {    input, err := in.ReadString('\n')    if err != nil {      panic(err)    }  }}我应该如何修改for循环,以在输入单个点时停止程序?我试图用for语句实现while循环,我的方法是否有问题,条件是否错误,还是ReadString弄乱了我的数据?
查看完整描述

3 回答

?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

... ReadString弄乱了我的数据吗?

不,不是。它正在阅读下一个'\n'。这意味着一行上只有一个点的行将具有数据".\n"".\r\n"取决于操作系统。

要删除行尾,我会这样做 input = strings.TrimRight(input, "\r\n")


查看完整回答
反对 回复 2021-05-31
?
三国纷争

TA贡献1804条经验 获得超7个赞

以防万一其他人遇到这个问题:


从Go 1.1开始,有一种更好的方法来循环一些可用输入的行。这就是我今天要解决OP的问题的方式:


package main


import (

    "bufio"

    "fmt"

    "os"

)


func main() {

    scanner := bufio.NewScanner(os.Stdin)

    for scanner.Scan() {

        line := scanner.Text()

        if line == "." {

            break

        }

        fmt.Println(line) // or do something else with line

    }

}

scanner.Text() 自动删除尾随的换行符。


查看完整回答
反对 回复 2021-05-31
  • 3 回答
  • 0 关注
  • 173 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信