第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

尋找相當(dāng)于scanf的Go

尋找相當(dāng)于scanf的Go

Go
牛魔王的故事 2021-04-08 14:09:00
我正在尋找相當(dāng)于scanf()的Go。我嘗試使用以下代碼:  1 package main  2   3 import (  4     "scanner"  5     "os"  6     "fmt"  7 )  8   9 func main() { 10     var s scanner.Scanner 11     s.Init(os.Stdin) 12     s.Mode = scanner.ScanInts 13     tok := s.Scan() 14     for tok != scanner.EOF { 15         fmt.Printf("%d ", tok) 16         tok = s.Scan() 17     } 18     fmt.Println() 19 }我用帶有整數(shù)行的文本輸入來(lái)運(yùn)行它。但是它總是輸出-3 -3 ...以及如何掃描由字符串和一些整數(shù)組成的行?每當(dāng)遇到新的數(shù)據(jù)類型時(shí)都要更改模式?軟件包文檔:包裹掃描儀用于UTF-8編碼文本的通用掃描儀。但似乎該掃描儀不是用于一般用途。更新的代碼:func main() {    n := scanf()    fmt.Println(n)    fmt.Println(len(n))}func scanf() []int {    nums := new(vector.IntVector)    reader := bufio.NewReader(os.Stdin)    str, err := reader.ReadString('\n')    for err != os.EOF {        fields := strings.Fields(str)        for _, f := range fields {            i, _ := strconv.Atoi(f)            nums.Push(i)        }           str, err = reader.ReadString('\n')    }       r := make([]int, nums.Len())    for i := 0; i < nums.Len(); i++ {        r[i] = nums.At(i)    }       return r}改良版:package mainimport (    "bufio"    "os"    "io"    "fmt"    "strings"    "strconv"    "container/vector")func main() {    n := fscanf(os.Stdin)    fmt.Println(len(n), n)}func fscanf(in io.Reader) []int {    var nums vector.IntVector    reader := bufio.NewReader(in)    str, err := reader.ReadString('\n')    for err != os.EOF {        fields := strings.Fields(str)        for _, f := range fields {            if i, err := strconv.Atoi(f); err == nil {                nums.Push(i)            }           }           str, err = reader.ReadString('\n')    }       return nums}
查看完整描述

3 回答

?
慕容708150

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超4個(gè)贊

沒(méi)有行號(hào),更新后的代碼更容易編譯,但是缺少package和import語(yǔ)句。


查看您的代碼,我注意到了幾件事。這是我的代碼修訂版。


package main


import (

    "bufio"

    "fmt"

    "io"

    "os"

    "strconv"

    "strings"

    "container/vector"

)


func main() {

    n := scanf(os.Stdin)

    fmt.Println()

    fmt.Println(len(n), n)

}


func scanf(in io.Reader) []int {

    var nums vector.IntVector

    rd := bufio.NewReader(os.Stdin)

    str, err := rd.ReadString('\n')

    for err != os.EOF {

        fields := strings.Fields(str)

        for _, f := range fields {

            if i, err := strconv.Atoi(f); err == nil {

                nums.Push(i)

            }

        }

        str, err = rd.ReadString('\n')

    }

    return nums

}

我可能要使用任何輸入文件scanf(),而不僅僅是Stdin;scanf()以aio.Reader作為參數(shù)。


您寫(xiě)道:nums := new(vector.IntVector),在哪里type IntVector []int。這會(huì)分配一個(gè)名為的整數(shù)切片引用nums并將其初始化為零,然后該new()函數(shù)會(huì)分配一個(gè)整數(shù)切片參考并將其初始化為零,然后將其分配給nums。我寫(xiě)道:var nums vector.IntVector,它通過(guò)簡(jiǎn)單地分配一個(gè)名為的整數(shù)切片引用nums并將其初始化為零來(lái)避免冗余。


您沒(méi)有檢查的err值strconv.Atoi(),這意味著無(wú)效的輸入已轉(zhuǎn)換為零值。我跳過(guò)它。


要將向量從向量復(fù)制到新切片并返回該切片,您編寫(xiě)了:


r := make([]int, nums.Len())

for i := 0; i < nums.Len(); i++ {

    r[i] = nums.At(i)

}

return r

首先,我簡(jiǎn)單地將其替換為等效的IntVector.Data()方法:return nums.Data()。然后,我利用了這一事實(shí),type IntVector []int并通過(guò)將其替換為來(lái)避免分配和復(fù)制return nums。


查看完整回答
反對(duì) 回復(fù) 2021-04-26
?
小怪獸愛(ài)吃肉

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超1個(gè)贊

本示例始終一次讀取一行,然后將整個(gè)行作為字符串返回。如果要從中解析出特定值,則可以。


package main


import (

    "fmt"

    "bufio"

    "os"

    "strings"

)


func main() {

    value :=    Input("Please enter a value: ")

    trimmed := strings.TrimSpace(value)

    fmt.Printf("Hello %s!\n", trimmed)

}


func Input(str string) string { 

        print(str) 

        reader := bufio.NewReader(os.Stdin) 

        input, _ := reader.ReadString('\n') 

        return input 

}


查看完整回答
反對(duì) 回復(fù) 2021-04-26
?
函數(shù)式編程

TA貢獻(xiàn)1807條經(jīng)驗(yàn) 獲得超9個(gè)贊

在對(duì)我的回答之一的評(píng)論中,您說(shuō):


根據(jù)語(yǔ)言規(guī)范:“當(dāng)通過(guò)聲明或make()或new()調(diào)用分配內(nèi)存來(lái)存儲(chǔ)值時(shí),沒(méi)有提供任何顯式初始化,則為該內(nèi)存提供默認(rèn)初始化”。那new()有什么意義呢?


如果我們運(yùn)行:


package main


import ("fmt")


func main() {

    var i int

    var j *int

    fmt.Println("i (a value) = ", i, "; j (a pointer) = ", j)

    j = new(int)

    fmt.Println("i (a value) = ", i, "; j (a pointer) = ", j, "; *j (a value) = ", *j)

}

該聲明var i int分配內(nèi)存以存儲(chǔ)整數(shù)值,并將該值初始化為零。該聲明var j *int分配內(nèi)存以存儲(chǔ)指向整數(shù)值的指針,并將該指針初始化為零(nil指針);沒(méi)有分配內(nèi)存來(lái)存儲(chǔ)整數(shù)值。我們看到程序輸出類似于:


i (a value) =  0 ; j (a pointer) =  <nil>

內(nèi)置函數(shù)new采用類型T并返回type的值*T。內(nèi)存被初始化為零值。該語(yǔ)句j = new(int)分配內(nèi)存以存儲(chǔ)整數(shù)值,并將該值初始化為零,然后在j中存儲(chǔ)指向該整數(shù)值的指針。我們看到程序輸出類似于:


i (a value) =  0 ; j (a pointer) =  0x7fcf913a90f0 ; *j (a value) =  0


查看完整回答
反對(duì) 回復(fù) 2021-04-26
  • 3 回答
  • 0 關(guān)注
  • 234 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)