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

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

避免空格作為輸入

避免空格作為輸入

Go
斯蒂芬大帝 2022-07-04 10:38:46
我是 golang 的新手,已經從 python 切換了。我正在嘗試掃描一個數組并將其顯示給用戶。但是,如果有任何尾隨空格,則 go 不會等待用戶輸入下一個 int(就像在 c++ 中發生的那樣),而是使用零。func main() {    var k int    fmt.Scanf("%d", &k)    for i:= 0 ; i< k ; i++{        arr(5)    }}func arr(l int){    arr:= make([]int, l)    for i := 0; i < l; i++ {        fmt.Scanf("%d",&arr[i])    }    fmt.Println(arr)}這是我的代碼,所以當我輸入1_1_2_3_4_5_ 其中下劃線表示將打印出來的黑色空間[0 1 2 3 4]預期的結果是[1 2 3 4 5]我的代碼有問題嗎?或者這就是 Scanf() 函數的工作方式,如果是這樣,我應該使用什么以便它類似于 c++ scanf() 的工作方式?我試圖了解為什么我自己會發生這種情況并遇到緩沖區,但我不明白這里的圖片是如何出現的。
查看完整描述

1 回答

?
慕娘9325324

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

您的輸出是忽略返回的錯誤的結果fmt.Scanf。


使用您顯示的第一次調用fmt.Scanfinside的輸入arr()將返回: 0和 unexpected newline.


第一個值是成功掃描的項目數。第二個是返回的錯誤。因為有一個錯誤,arr[0]沒有分配任何東西并保持在默認值0. 由于您忽略了錯誤,因此程序將繼續并從下一行開始arr[1]掃描。1


根據fmt.Scanf文檔,錯誤來自輸入中的換行符需要匹配格式字符串中的換行符這一事實。


要正確處理第一行,您應該具有以下內容:


func main() {

    var k int

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

    if err != nil {

        panic(err)

    }

    if n != 1 {

        panic("expected one input")

    }

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

        arr(5)

    }

}

您同樣需要處理arr().

兩條忠告:

  • 永遠不要忽略錯誤

  • 閱讀您使用的功能的文檔


查看完整回答
反對 回復 2022-07-04
  • 1 回答
  • 0 關注
  • 129 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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