http://golang.org/pkg/fmt/#Scanf
Go 中包含的所有库都有很好的文档记录。
话虽如此,我相信
func main() {
var i int
_, err := fmt.Scanf("%d", &i)
}
成功了
另一种更简洁的方法是只使用 fmt.Scan
:
package main
import "fmt"
func main() {
var i int
fmt.Scan(&i)
fmt.Println("read number", i, "from stdin")
}
这使用对参数类型的反射来发现应该如何解析输入。
http://golang.org/pkg/fmt/#Scan
Golang fmt.Scan 比 Golang fmt.Scanf 简单(比 Clang scanf 简单)
如果 fmt.Scan 错误,即如果不是 nil,则记录并返回
读取单个变量:
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)
2 读取多个变量:
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)
祝你好运
示例来自:http://www.sortedinf.com/?q=golang-in-1-hour
这是我读取正整数的“快速 IO”方法。可以通过位移和提前布局内存来改进它。
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
}
您可以将 fmt.Scanf
与格式说明符一起使用。整数的格式说明符是 %d。所以你可以使用如下的标准输入。
func main() {
var someVar int
fmt.Scanf("%d", &someVar)
}
否则您可以使用 fmt.Scan
或 fmt.Scanln
,如下所示。
func main() {
var someVar int
fmt.Scanln(&someVar)
}
您还可以使用 bufio.NewReader
从标准输入中读取一个整数。
下面的程序:
提示输入整数
创建一个 bufio.Reader 从标准输入读取
读取输入直到遇到换行符 '\n' (请注意,这只会读取一个整数。空格分隔的值将不起作用)
删除换行符
将字符串转换为 int
package main
import (
"fmt"
"bufio"
"os"
"strconv"
"strings"
)
func getInt() error {
fmt.Println("Enter an integer")
userInput := bufio.NewReader(os.Stdin)
userVal, err := userInput.ReadString('\n')
if err != nil {
return err
}
input := strings.TrimSpace(userVal)
intVal, err := strconv.Atoi(input)
if err != nil {
return err
}
fmt.Printf("You entered: %d\n", intVal)
return nil
}
func main() {
getInt()
}
为什么我们不能只使用scanf?就像我们在 C 中使用的那样?它虽然有效。
package main
import "fmt"
func main() {
var i int
fmt.Scanf("%d", &i)
fmt.Println(i)
}
&i
而不仅仅是像fmt.Printf("%v", i)
中的i
吗?i
只是i
中的整数值,&i
是指向i
的指针。if err != nil { log.Fatal(err) }
否则会引发错误,因为您已声明err
而未使用它