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

我正在学习围棋。


我的程序应该从stdin读取数据,直到我输入一个单句点的行。


package main


import (


  "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弄乱了我的数据?


慕森卡
浏览 174回答 3
3回答

繁星点点滴滴

... ReadString弄乱了我的数据吗?不,不是。它正在阅读下一个'\n'。这意味着一行上只有一个点的行将具有数据".\n"或".\r\n"取决于操作系统。要删除行尾,我会这样做 input = strings.TrimRight(input, "\r\n")

三国纷争

以防万一其他人遇到这个问题:从Go 1.1开始,有一种更好的方法来循环一些可用输入的行。这就是我今天要解决OP的问题的方式:package mainimport (    "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() 自动删除尾随的换行符。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go