for-loop - Go中的无限循环

标签 for-loop go infinite-loop

我想让“for循环”循环3次或直到用户输入除整数以外的其他值。下面是我的代码,尽管这将运行无数次并打印出用户输入的第一个值。

package main

import "fmt"
import "bufio"
import "strconv"
import "os"
import "sort"

func main(){
    emptySlice := make([]int, 3) // Capacity of 3
    fmt.Println(cap(emptySlice))
    scanner := bufio.NewScanner(os.Stdin) // Creating scanner object
    fmt.Printf("Please enter a number: ")
    scanner.Scan() // Will always scan in a string regardless if its a number

    for i := 0; i < cap(emptySlice); i++ { // Should this not run 3 times?
            input, err := strconv.ParseInt(scanner.Text(), 10, 16)
                    if err != nil{
                        fmt.Println("Not a valid entry! Ending program")
                        break
                    }
                emptySlice = append(emptySlice, int(input)) // adds input to the slice
                sort.Ints(emptySlice) // sorts the slice
                fmt.Println(emptySlice) // Prints the slice
    }   
    
}

最佳答案

我认为有几个小错误,但是此版本应该可以正常工作:

package main

import "fmt"
import "bufio"
import "strconv"
import "os"
import "sort"

func main() {
    emptySlice := make([]int, 3) // Capacity of 3
    fmt.Println(cap(emptySlice))
    scanner := bufio.NewScanner(os.Stdin) // Creating scanner object

    for i := 0; i < cap(emptySlice); i++ { // Should this not run 3 times?
        fmt.Printf("Please enter a number: ")
        scanner.Scan() // Will always scan in a string regardless if its a number

        input, err := strconv.ParseInt(scanner.Text(), 10, 16)
        if err != nil {
            fmt.Println("Not a valid entry! Ending program")
            break
        }
        // emptySlice = append(emptySlice, int(input)) // adds input to the slice
        emptySlice[i] = int(input)
    }

    sort.Ints(emptySlice)   // sorts the slice
    fmt.Println(emptySlice) // Prints the slice

}
我将提示移入了循环,并用直接分配给先前分配的 slice 条目替换了append调用。否则,调用append只会增加分片的大小。
我将排序和打印移到了循环之外,因为它们似乎也放置不正确。

关于for-loop - Go中的无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63045129/

相关文章:

c++ - 迭代器或 reverse_iterator 的一个变量?

javascript - 尝试使用 for 循环对对象内的数组求和

servlets - 如何将 servlet 映射到/*,它会因无限循环而失败并最终导致 StackOverflowError

Java 8 for 循环不一致 : List of BinaryOperator vs List of Integer

Javascript数组返回是否添加双引号?

http - 如何在 Go 中绑定(bind)一个 http.Client 到一个 IP 地址

json - 为什么struct field的格式串总是小写

go - 如何设计一个返回另一个只能紧急实现的接口(interface)类型的接口(interface)

c++ - cout 不起作用时如何检测无限循环?

java - 当循环读取扫描仪时,它会进入无限循环