亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在Go中使用fmt.Scanf

如何在Go中使用fmt.Scanf

Go
精慕HU 2021-05-11 16:14:04
在for循環中獲取用戶輸入時,我似乎遇到了一個奇怪的問題。這是我的代碼package mainimport "fmt"func main() {    var num int    for i := 0; i < 10; i++ {        fmt.Printf("Debug: i : %d ", i)        fmt.Scanf("%d", &num)        fmt.Println(num)    }}當我運行此代碼時,將發生以下情況:Debug: i : 0Enter next number11Debug: i : 1Enter next number1Debug: i : 2Enter next number22Debug: i : 3Enter next number2Debug: i : 4Enter next number33Debug: i : 5Enter next number3Debug: i : 6Enter next number44Debug: i : 7Enter next number4Debug: i : 8Enter next number55Debug: i : 9Enter next number5我注意到的是,循環的每次迭代都發生兩次,這可能是因為Go默認情況下使用了并行性,并且導致兩個處理器都在for循環中運行代碼嗎?
查看完整描述

3 回答

?
弒天下

TA貢獻1818條經驗 獲得超8個贊

您正在使用什么操作系統?視窗?


試試這個:


package main


import "fmt"


func main() {

    var num int

    for i := 0; i < 10; i++ {

        fmt.Printf("Debug: i : %d\n", i)

        fmt.Println("Enter next number")

        n, err := fmt.Scanf("%d\n", &num)

        if err != nil {

            fmt.Println(n, err)

        }

        fmt.Println(num)

    }

}

輸出:


Debug: i : 0

Enter next number

1

1

Debug: i : 1

Enter next number

2

2

Debug: i : 2

Enter next number

3

3

Debug: i : 3

Enter next number

4

4

Debug: i : 4

Enter next number

5

5

Debug: i : 5

Enter next number

6

6

Debug: i : 6

Enter next number

7

7

Debug: i : 7

Enter next number

8

8

Debug: i : 8

Enter next number

9

9

Debug: i : 9

Enter next number

10

10


查看完整回答
反對 回復 2021-05-24
?
qq_遁去的一_1

TA貢獻1725條經驗 獲得超8個贊

上面的答案是一個很好的建議。編碼


    if err != nil {

        fmt.Println(n, err)

    }

將輸出此問題的原因。


  10 unexpected newline

因此,我將代碼更改為此,并且它可以正常工作。


package main


import "fmt"


func main() {

    var num int

    for i := 0; i < 10; i++ {

        fmt.Printf("Debug: i : %d ", i)

        fmt.Scanf("%d\n", &num) // add "\n"

        fmt.Println(num)

    }

}

這是因為行尾不同。Windows使用回車和換行(\r\n)作為行尾。Unix使用換行符(\n)。


您可以使用notepad2創建帶有\r換行符的文件(a.txt)。并執行以下操作:


  go run s.go < input.txt

這將正常工作。


查看完整回答
反對 回復 2021-05-24
?
慕虎7371278

TA貢獻1802條經驗 獲得超4個贊

僅指出fmt.Scanln(#)可能與fmt.Scanf(“%d \ n”,#)相同,因為fmt.Scanln(#)也檢查“ num”的類型。

換句話說,如果

var num float32
fmt.Scanln(&num)

您可以從控制臺輸入浮動號碼。


查看完整回答
反對 回復 2021-05-24
  • 3 回答
  • 0 關注
  • 257 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號