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

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

os.Open 無法識別文件名變量,但“硬編碼”文件名??可以

os.Open 無法識別文件名變量,但“硬編碼”文件名??可以

Go
HUH函數 2022-05-23 15:31:17
正如標題所說,我正在嘗試讀取具有 1 個 9x9 謎題的數獨謎題文件。這是代碼:package mainimport (    "bufio"    "fmt"    "log"    "os")func check(e error){    if e != nil{        panic(e)    }}func main(){    var mFile string    var puzzle []string    s := bufio.NewReader(os.Stdin)    fmt.Println("Please enter file name: ")    mFile, _ = s.ReadString('\n')    fmt.Print("Confirm file: " + mFile)    readFile, err := os.Open(mFile)    if err != nil{        log.Fatalf("Failed to open file: %s", err)    }    fileScanner := bufio.NewScanner(readFile)    fileScanner.Split(bufio.ScanLines)    for fileScanner.Scan() {        puzzle = append(puzzle, fileScanner.Text())    }    readFile.Close()    for _, eachLine := range puzzle{        fmt.Println(eachLine)    }}程序要求輸入文件名,該文件名被接受,第 24 行:fmt.Print("Confirm file: " + mFile)確認文件名被捕獲,但是當它將變量傳遞給 os.Open 時,它說文件不存在。但是,如果我手動編碼 os.Open("theFileName.txt") ,文件將按預期打開和打印。os.Open 無法識別變量并且只能識別硬編碼文件名的任何原因?
查看完整描述

2 回答

?
慕標5832272

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

文檔

ReadString 讀取直到輸入中第一次出現 delim,返回一個字符串,其中包含直到并包括分隔符的數據。

新行在mFile. 在將其傳遞給 os.Open 之前,您需要將其剝離。當您對文件名進行硬編碼時,您沒有包含尾隨的新行。


查看完整回答
反對 回復 2022-05-23
?
蠱毒傳說

TA貢獻1895條經驗 獲得超3個贊

只要文件名之間沒有空格,您也可以使用 fmt.Scan() 接受用戶的文本輸入(換行符算作空格)


package main


import (

    "bufio"

    "fmt"

    "log"

    "os"

)


func check(e error) {

    if e != nil {

        panic(e)

    }

}


func main() {


    var puzzle []string


    var fName string

    fmt.Println("Please enter file name: ")

    _, err := fmt.Scan(&fName)

    if err != nil {

        log.Println(err)

        return

    }


    fmt.Println("Confirm file:" + fName)


    readFile, err := os.Open(fName)


    if err != nil {

        log.Fatalf("Failed to open file: %s", err)

    }


    fileScanner := bufio.NewScanner(readFile)

    fileScanner.Split(bufio.ScanLines)


    for fileScanner.Scan() {

        puzzle = append(puzzle, fileScanner.Text())

    }


    readFile.Close()


    for _, eachLine := range puzzle {

        fmt.Println(eachLine)

    }


}


查看完整回答
反對 回復 2022-05-23
  • 2 回答
  • 0 關注
  • 201 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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