您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

为什么Go中的fmt.Scanf不等待用户输入?

为什么Go中的fmt.Scanf不等待用户输入?

这是发行5391fmtScanf拒绝\r\n在Windows上线的末端。

作为一种解决方法,要检查输入是否有效,请编写,

var inputSquare float64
n, err := fmt.Scanf("%f\n", &inputSquare)
if err != nil || n != 1 {
    // handle invalid input
    fmt.Println(n, err)
}

var inputGuess float64
n, err = fmt.Scanf("%f\n", &inputGuess)
if err != nil || n != 1 {
    // handle invalid input
    fmt.Println(n, err)
}

解决方法"%f\n"格式字符串中的换行符。

fmt

功能扫描

func Scanf(format string, a ...interface{}) (n int, err error)

Scanf扫描从标准输入读取的文本,将连续的以空格分隔的值存储到由格式确定的连续的参数中。它返回成功扫描的项目数。

这是一个完整的工作程序:

package main

import (
    "fmt"
)

// compute square roots by using Newton's method
func main() {
    var x float64 //number to take square root
    var y float64 //this is the guess
    var q float64 //this is the quotient
    var a float64 //this is the average

    fmt.Print("Enter a number to take its square root: ")
    var inputSquare float64
    n, err := fmt.Scanf("%f\n", &inputSquare)
    if err != nil || n != 1 {
        // handle invalid input
        fmt.Println(n, err)
        return
    }

    fmt.Print("Enter first guess ")
    var inputGuess float64
    n, err = fmt.Scanf("%f\n", &inputGuess)
    if err != nil || n != 1 {
        // handle invalid input
        fmt.Println(n, err)
        return
    }

    x = inputSquare
    y = inputGuess
    for i := 0; i < 10; i++ {
        q = x / y       // compute the quotient; x and y are given
        a = (q + y) / x // compute the average
        y = a           // set the guess to the average
    }
    fmt.Printf("sqrt(%g) = %g\n", x, y)
}

输出

Enter a number to take its square root: 2.0
Enter first guess 1.0
sqrt(2) = 1.414213562373095

我在Windows 7上使用Go 1.1.1:

C:\>go version
go version go1.1.1 windows/amd64
Go 2022/1/1 18:15:01 有597人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶