3 回答

TA貢獻1831條經驗 獲得超4個贊
沒有行號,更新后的代碼更容易編譯,但是缺少package和import語句。
查看您的代碼,我注意到了幾件事。這是我的代碼修訂版。
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作為參數。
您寫道:nums := new(vector.IntVector),在哪里type IntVector []int。這會分配一個名為的整數切片引用nums并將其初始化為零,然后該new()函數會分配一個整數切片參考并將其初始化為零,然后將其分配給nums。我寫道:var nums vector.IntVector,它通過簡單地分配一個名為的整數切片引用nums并將其初始化為零來避免冗余。
您沒有檢查的err值strconv.Atoi(),這意味著無效的輸入已轉換為零值。我跳過它。
要將向量從向量復制到新切片并返回該切片,您編寫了:
r := make([]int, nums.Len())
for i := 0; i < nums.Len(); i++ {
r[i] = nums.At(i)
}
return r
首先,我簡單地將其替換為等效的IntVector.Data()方法:return nums.Data()。然后,我利用了這一事實,type IntVector []int并通過將其替換為來避免分配和復制return nums。

TA貢獻1852條經驗 獲得超1個贊
本示例始終一次讀取一行,然后將整個行作為字符串返回。如果要從中解析出特定值,則可以。
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
}

TA貢獻1807條經驗 獲得超9個贊
在對我的回答之一的評論中,您說:
根據語言規范:“當通過聲明或make()或new()調用分配內存來存儲值時,沒有提供任何顯式初始化,則為該內存提供默認初始化”。那new()有什么意義呢?
如果我們運行:
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分配內存以存儲整數值,并將該值初始化為零。該聲明var j *int分配內存以存儲指向整數值的指針,并將該指針初始化為零(nil指針);沒有分配內存來存儲整數值。我們看到程序輸出類似于:
i (a value) = 0 ; j (a pointer) = <nil>
內置函數new采用類型T并返回type的值*T。內存被初始化為零值。該語句j = new(int)分配內存以存儲整數值,并將該值初始化為零,然后在j中存儲指向該整數值的指針。我們看到程序輸出類似于:
i (a value) = 0 ; j (a pointer) = 0x7fcf913a90f0 ; *j (a value) = 0
- 3 回答
- 0 關注
- 239 瀏覽
添加回答
舉報