Golang退出bufio for loop进入另一个for loop

Golang退出bufio for loop进入另一个for loop,go,Go,我有一个初始循环,不断询问用户问题,直到用户键入q退出 func main() { scanner := bufio.NewScanner(os.Stdin) quit := false var city string var anything string for quit == false { fmt.Println("Enter a city name") for scanner.Scan(){ city= scanner.Text(

我有一个初始循环,不断询问用户问题,直到用户键入q退出

func main() {
 scanner := bufio.NewScanner(os.Stdin)
 quit := false
 var city string
 var anything string
 for quit == false {    
     fmt.Println("Enter a city name")
     for scanner.Scan(){
         city= scanner.Text()
         fmt.Printf("q to quit (Anything else to continue): ")
         anything = scanner.Text()
     }
     if anything == "q" {
         fmt.Println(city)
         quit = true
     }
 }
}
我努力想弄清楚的是,如何退出扫描仪的嵌套for循环,并继续初始for循环,直到用户输入q。现在,它不会退出第二个循环,所以它总是提示“q退出…”,当我设置一个中断时,它会退出两个循环


你知道我应该如何解决这个问题吗?

很难确切地说出你想要什么,因为你没有向我们提供示例输入和输出。也许,根据您的代码,类似这样的内容:

package main

import (
    "bufio"
    "fmt"
    "os"
)

func main() {
    var cities []string
    scanner := bufio.NewScanner(os.Stdin)
    for {
        fmt.Println("Enter a city name")
        if !scanner.Scan() {
            break
        }
        city := scanner.Text()
        if len(city) > 0 {
            cities = append(cities, city)
        }
        fmt.Printf("q to quit (Anything else to continue): ")
        if !scanner.Scan() || scanner.Text() == "q" {
            break
        }
    }
    if err := scanner.Err(); err != nil {
        fmt.Fprintln(os.Stderr, err)
    }
    fmt.Printf("%q\n", cities)
}
输出:

Enter a city name
Los Angeles
q to quit (Anything else to continue): 
Enter a city name
London
q to quit (Anything else to continue): 
Enter a city name
Delhi
q to quit (Anything else to continue): q
["Los Angeles" "London" "Delhi"]

很难准确说出您想要什么,因为您没有向我们提供示例输入和输出。也许,根据您的代码,类似这样的内容:

package main

import (
    "bufio"
    "fmt"
    "os"
)

func main() {
    var cities []string
    scanner := bufio.NewScanner(os.Stdin)
    for {
        fmt.Println("Enter a city name")
        if !scanner.Scan() {
            break
        }
        city := scanner.Text()
        if len(city) > 0 {
            cities = append(cities, city)
        }
        fmt.Printf("q to quit (Anything else to continue): ")
        if !scanner.Scan() || scanner.Text() == "q" {
            break
        }
    }
    if err := scanner.Err(); err != nil {
        fmt.Fprintln(os.Stderr, err)
    }
    fmt.Printf("%q\n", cities)
}
输出:

Enter a city name
Los Angeles
q to quit (Anything else to continue): 
Enter a city name
London
q to quit (Anything else to continue): 
Enter a city name
Delhi
q to quit (Anything else to continue): q
["Los Angeles" "London" "Delhi"]

这个代码对我来说毫无意义。为什么if语句在扫描循环之外?它在错误发生之前不会执行。它在外部,因为如果用户不输入q,我希望程序再次要求输入城市名称。我想你误解了扫描仪的工作原理。再次阅读文档。例如,city和anything将具有相同的值,因为Text()的返回值在下次调用Scan之前不会更改。应该只有一个循环。你说得对,谢谢!这个代码对我来说毫无意义。为什么if语句在扫描循环之外?它在错误发生之前不会执行。它在外部,因为如果用户不输入q,我希望程序再次要求输入城市名称。我想你误解了扫描仪的工作原理。再次阅读文档。例如,city和anything将具有相同的值,因为Text()的返回值在下次调用Scan之前不会更改。应该只有一个循环。你说得对,谢谢!