1 回答

TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超3個(gè)贊
好吧,如果您查看文檔中的如何掃描它說
Scan、Fscan、Sscan 將輸入中的換行符視為空格。
我試過下面的代碼
package main
import "fmt"
func main() {
loops := 1
for loops > 0 {
fmt.Printf("\nNo of loops\n")
temp := 1
fmt.Scanf("%d %d", &loops, &temp)
fmt.Println("Temp:", temp)
for i := 0; i < loops; i++ {
fmt.Printf("\ti: %d \n", i)
}
}
}
我創(chuàng)建了一個(gè)臨時(shí)變量并從上面的 os.Stdin 掃描。
loops=1 的輸出是
Loop: 1
No of loops
1
Temp: 1
i: 0
Loop: 1
No of loops
所以 temp 取出了新行,外循環(huán)按預(yù)期執(zhí)行。
沒有臨時(shí)變量,流程就像
-> loops=1
-> outer for
-> scanf loops (as 1)
-> inner for loop
-> outer for
-> scanning will be ignored. since buffer is present in Standard Input, i.e., new line.
-> inner for loop
也就是說,我們看到兩個(gè)內(nèi)部循環(huán) for loops=1。這不僅適用于 for loops=1,而且對(duì)于任何循環(huán)值都會(huì)為您提供 2 個(gè)內(nèi)部 for 循環(huán)。
您可以在代碼中如上所述防止這種情況,也可以使用Scanln方法。
Scanln 類似于 Scan,但在換行處停止掃描,并且在最后一項(xiàng)之后必須有換行符或 EOF。
這樣的事情應(yīng)該做
fmt.Scanln(&loops)
- 1 回答
- 0 關(guān)注
- 172 瀏覽
添加回答
舉報(bào)