Golang for loop不会停止

时间:2014-02-03 07:17:33

标签: go

所以我开始学习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"))
    }

}

我试图一次读完整个字符串,所以我认为使用扫描时,bufio会更好。我添加了最后一个打印,表明该方法返回false但循环继续执行。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:9)

循环中的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"))
    }

您在循环中使用了:=赋值运算符,如line, err := ....中所示。 这使Go在名为line的for循环内创建一个新符号。但for的检查超出了循环代码块的内部范围。所以它指的是在循环外发起的旧line

将循环内的运算符更改为=不会创建新变量,也不会初始化err,所以我也事先定义了它。 err可以在循环内声明,但这是多余的。