新手問題:我正在嘗試撰寫一個程式,該程式將一個目錄輸入到終端中,以便在該目錄上的程式中執行稍后的操作。如果用戶沒有輸入一個存在的目錄,我如何讓程式不斷要求用戶輸入一個有效的目錄?我在這個程式上遇到的錯誤列在底部。我最初嘗試使用 fmt.Scan() 來獲取用戶輸入,現在已經轉移到 bufio 掃描儀上,并且不知所措,所以想我會問專家。非常感謝您的幫助!
包主
匯入(“bufio”“fmt”“os”)
fmt.Println("What file path would you like to search?")
input := bufio.NewScanner(os.Stdin)
for input.Scan() {
text := input.Text()
x, _ := os.Stat(text)
if x.IsDir() {
fmt.Println("Cool this is a directory")
} else {
fmt.Println("Sorry, this is not a directory")
continue
}
}
}```
Error:
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x18 pc=0x48b465]
uj5u.com熱心網友回復:
您可以在 os.Stat() 函式上捕獲錯誤。代碼片段看起來像這樣
x, err := os.Stat(text)
if err != nil {
fmt.Println("Re-enter a valid dir:")
continue
}
uj5u.com熱心網友回復:
您可能想要檢查 Scan 方法的輸出,以及那里可能發生的任何錯誤。
根據檔案:
Scan 將 Scanner 推進到下一個令牌,然后可以通過 Bytes 或 Text 方法獲得該令牌。當掃描停止時,它會回傳 false,無論是到達輸入的末尾還是錯誤。Scan回傳false后,Err方法會回傳掃描程序中發生的任何錯誤,除非是io.EOF,Err會回傳nil。如果 split 函式回傳太多空標記而不推進輸入,則掃描恐慌。這是掃描儀的常見錯誤模式。
因此,嘗試檢查該Err()方法是否有任何錯誤并檢查input.Scan呼叫的回傳值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/347810.html
標籤:走
