我正在学习围棋。我的程序应该从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")
三国纷争
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() 自动删除尾随的换行符。
- 3 回答
- 0 关注
- 173 浏览
添加回答
举报
0/150
提交
取消