nums := make([]int, 0)
{
var d int
for {
_, err := fmt.Scan(&d)
if err != nil {
break
}
nums = append(nums, d)
}
}
Run Code Online (Sandbox Code Playgroud)
这可以从stdin中读取整数.但是如果stdin看起来像1 2 3 f4 5,nums最终会[1 2 3]报告没有任何错误.
处理这个问题的最佳方法是什么?(即,我希望EOF fmt.Scan以静默方式退出循环,但应报告所有其他错误).
编辑:io.EOF我只需要 - 我没有在http://golang.org/pkg/fmt/上找到
nums := make([]int, 0)
{
var d int
for {
_, err := fmt.Scan(&d)
if err != nil {
if err != io.EOF {
log.Fatal(err)
}
break
}
nums = append(nums, d)
}
}
Run Code Online (Sandbox Code Playgroud)
Nic*_*ood 13
你可以这样做 - 当你得到一个坏号码时,阅读下一个空格分隔的东西.设置标志或错误或保留最后报告的错误列表.
(游乐场链接)
package main
import (
"bytes"
"fmt"
"io"
)
func main() {
in := bytes.NewBufferString("1 2 3 f4 5")
nums := make([]int, 0)
var d int
for i := 0; i < 10; i++ {
_, err := fmt.Fscan(in, &d)
if err == io.EOF {
break
}
if err != nil {
var s string
_, err := fmt.Fscan(in, &s)
if err != nil {
break
}
fmt.Printf("Skipping bad number: %q\n", s)
} else {
nums = append(nums, d)
}
}
fmt.Printf("nums = %v\n", nums)
}
Run Code Online (Sandbox Code Playgroud)
哪个打印
Skipping bad number: "f4"
nums = [1 2 3 5]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9105 次 |
| 最近记录: |