登录
首页 >  Golang >  Go问答

循环为何未按描述顺序执行命令

来源:stackoverflow

时间:2024-03-01 19:06:25 143浏览 收藏

欢迎各位小伙伴来到golang学习网,相聚于此都是缘哈哈哈!今天我给大家带来《循环为何未按描述顺序执行命令》,这篇文章主要讲到等等知识,如果你对Golang相关的知识非常感兴趣或者正在自学,都可以关注我,我会持续更新相关文章!当然,有什么建议也欢迎在评论留言提出!一起学习!

问题内容

现在我正在努力学习围棋。

我有代码:

package main

import (
    "bufio"
    "fmt"
    "os"
)

func main() {
    var wallcount int
    var width, height, area float64
    var r = bufio.newreader(os.stdin)
    fmt.print("wallcount:")
    fmt.scanf("%d", &wallcount)
    fmt.printf("wallcount =  %v \n", wallcount)
    for x := 1; x <= wallcount; x++ {
        fmt.printf("wight, height at %v times\n", x)
        fmt.fscanf(r, "%d %d", &width, &height)
        area += width * height
    }

    fmt.printf("area =  %v\n", area)

}

当我编译代码时

在终端上:

wallcount:

进入第四学期

wallcount:4
---
wallcount =  4
wight, height at 1 times
wight, height at 2 times

传递到第 1,1 项

WallCount:4
wallcount =  4
wight, height at 1 times
wight, height at 2 times
1,1
---
wight, height at 3 times
wight, height at 4 times
area =  0

你能解释一下吗

  1. 为什么我的 for 循环 运行第一个 cmd 两次,然后运行第二个 cmd,然后再次运行第一个 cmd 两次,最后运行最后一个 cmd?
  2. 为什么 area 包含 0?

正确答案


这里有一些问题。首先,您使用了 %d,它表示整数值,而您使用的是浮点值(使用 %f)。

此函数:fmt.fscanf(r, "%d %d", &width, &height) 返回两个值。第一个值是已成功解析的项目数,第二个值是错误。您应该始终检查返回的错误是否不是 nil,这意味着存在错误:

func main() {
    var wallCount int
    var width, height, area float64
    var r = bufio.NewReader(os.Stdin)
    fmt.Print("WallCount:")
    fmt.Scanf("%d", &wallCount)
    fmt.Printf("wallcount =  %v \n", wallCount)
    for x := 1; x <= wallCount; x++ {
        fmt.Printf("wight, height at %v times\n", x)
        _, err := fmt.Fscanf(r, "%f %f\n", &width, &height)
        if err != nil {
            log.Println(err)
            return
        }
        area += width * height
    }

    fmt.Printf("area =  %v\n", area)
}

在这种情况下,错误非常清楚地描述了错误所在,即:bad verb '%d' for float64。在 go 中,这种检查错误是否为 nil 的形式非常常见,您应该始终检查错误。

今天关于《循环为何未按描述顺序执行命令》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>