所以我开始学习Go编程语言,并希望有人能够澄清为什么我得到了我得到的结果.我正在尝试让程序读取用户的输入并显示回来,直到用户只输入换行符.包主
import (
"fmt"
"os"
"bufio"
"strings"
)
func main(){
inputBuff := bufio.NewReader(os.Stdin)
line,_ := inputBuff.ReadString('\n')
for (!strings.EqualFold(line,"\n")){
line,err := inputBuff.ReadString('\n')
if err!=nil {
fmt.Println(err)
}
fmt.Println(line)
fmt.Println(!strings.EqualFold(line,"\n"))
}
}
Run Code Online (Sandbox Code Playgroud)
我试图一次读完整个字符串,所以我认为使用扫描时bufio会更好.我添加了最后一个打印,表明该方法返回false但循环继续执行.任何帮助将不胜感激.
在line环内是不一样的line,你的检查开始.FTFY:
package main
import (
"fmt"
"os"
"bufio"
"strings"
)
func main(){
inputBuff := bufio.NewReader(os.Stdin)
line,_ := inputBuff.ReadString('\n')
var err error
for (!strings.EqualFold(line,"\n")){
line,err = inputBuff.ReadString('\n')
if err!=nil {
fmt.Println(err)
}
fmt.Println(line)
fmt.Println(!strings.EqualFold(line,"\n"))
}
Run Code Online (Sandbox Code Playgroud)
您:=在循环中使用了赋值运算符,如line, err := .....这使Go在名称中的for循环内创建一个新符号line.但for的检查超出了循环代码块的内部范围.所以它指的line是在循环之外启动的旧的.
更改循环内的运算符=不会创建新变量,也不会初始化err,所以我也事先定义了它.err可以在循环内声明,但这是多余的.