Làm cách nào để sử dụng fmt.Scanf
hàm trong Go để lấy đầu vào số nguyên từ đầu vào chuẩn?
Nếu điều này không thể được thực hiện bằng cách sử dụng fmt.Scanf
, cách tốt nhất để đọc một số nguyên là gì?
Câu trả lời:
http://golang.org/pkg/fmt/#Scanf
Tất cả các thư viện có trong Go đều được ghi chép đầy đủ.
Điều đó đang được nói, tôi tin rằng
func main() {
var i int
_, err := fmt.Scanf("%d", &i)
}
có lừa không
&i
và không chỉ i
như trong fmt.Printf("%v", i)
?
i
chỉ là giá trị số nguyên trong i
, &i
là một con trỏ tới i
.
Một giải pháp thay thế có thể ngắn gọn hơn một chút là chỉ sử dụng fmt.Scan
:
package main
import "fmt"
func main() {
var i int
fmt.Scan(&i)
fmt.Println("read number", i, "from stdin")
}
Điều này sử dụng sự phản ánh về loại đối số để khám phá cách phân tích cú pháp đầu vào.
Đây là phương pháp "IO nhanh" của tôi để đọc số nguyên dương. Nó có thể được cải thiện với các bithifts và bố trí trước bộ nhớ.
package main
import (
"io/ioutil"
"bufio"
"os"
"strconv"
)
func main() {
out := bufio.NewWriter(os.Stdout)
ints := getInts()
var T int64
T, ints = ints[0], ints[1:]
..
out.WriteString(strconv.Itoa(my_num) + "\n")
out.Flush()
}
}
func getInts() []int64 {
//assumes POSITIVE INTEGERS. Check v for '-' if you have negative.
var buf []byte
buf, _ = ioutil.ReadAll(os.Stdin)
var ints []int64
num := int64(0)
found := false
for _, v := range buf {
if '0' <= v && v <= '9' {
num = 10*num + int64(v - '0') //could use bitshifting here.
found = true
} else if found {
ints = append(ints, num)
found = false
num = 0
}
}
if found {
ints = append(ints, num)
found = false
num = 0
}
return ints
}
Golang fmt.Scan đơn giản hơn Golang fmt.Scanf (đơn giản hơn Clang scanf)
Nếu lỗi fmt.Scan, tức là nếu không phải nil, hãy ghi lại và trả về
import (
"fmt"
"log"
)
var i int
if _, err := fmt.Scan(&i); err != nil {
log.Print(" Scan for i failed, due to ", err)
return
}
fmt.Println(i)
import (
"fmt"
"log"
)
var i, j, k int
if _, err := fmt.Scan(&i, &j, &k); err != nil {
log.Print(" Scan for i, j & k failed, due to ", err)
return
}
fmt.Println(i, j, k)
May mắn nhất
Bạn có thể sử dụng fmt.Scanf
với công cụ định dạng. Thông số định dạng cho số nguyên là% d. Vì vậy, bạn có thể sử dụng đầu vào tiêu chuẩn như bên dưới.
func main() {
var someVar int
fmt.Scanf("%d", &someVar)
}
hoặc nếu không bạn có thể sử dụng fmt.Scan
hoặc fmt.Scanln
như bên dưới.
func main() {
var someVar int
fmt.Scanln(&someVar)
}