我正在学习Go.
我的程序应该从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)
}
}
}
Run Code Online (Sandbox Code Playgroud)
我应该如何修改for循环,以便在输入单个点时停止程序?
我尝试使用for语句实现while循环,我的方法有问题,条件是错误的,还是ReadString搞乱了我的数据?
sja*_*obi 14
以防万一其他人遇到这个问题:
从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
}
}
Run Code Online (Sandbox Code Playgroud)
scanner.Text() 自动剥离尾随换行符.
Ste*_*erg 11
...是ReadString弄乱我的数据?
不,不是.它正在读到下一个'\n'.这意味着只有一个点的行将具有数据".\n"或".\r\n"取决于操作系统.
要删除行结尾,我会这样做 input = strings.TrimRight(input, "\r\n")