告诉我这个代码有什么问题GOLANG
问题是我编译然后运行程序,它询问x1,我输入值,它同时询问y1和z1 实际上,所讨论的代码在unix系统上工作,但通常问题是调用fmt.Scanf%f之类的“x1”不使用换行符,而是引用以下文件包doc中的内容: Scan、Fscan、SSC可以将输入中的换行符视为空格 在Windows上,换行符不是单个字符,而是\r\n,因此后续fmt.Scanf调用将立即进行,而无需等待用户的进一步输入 因此,您必须在格式字符串中添加换行符,以避免后续fmt.Scanf调用继续:告诉我这个代码有什么问题GOLANG,go,math,printing,Go,Math,Printing,问题是我编译然后运行程序,它询问x1,我输入值,它同时询问y1和z1 实际上,所讨论的代码在unix系统上工作,但通常问题是调用fmt.Scanf%f之类的“x1”不使用换行符,而是引用以下文件包doc中的内容: Scan、Fscan、SSC可以将输入中的换行符视为空格 在Windows上,换行符不是单个字符,而是\r\n,因此后续fmt.Scanf调用将立即进行,而无需等待用户的进一步输入 因此,您必须在格式字符串中添加换行符,以避免后续fmt.Scanf调用继续: package main
package main
import (
"fmt"
"math"
)
func main() {
distencecalc()
}
func distencecalc() {
fmt.Println("X1 :")
var x1 float64
fmt.Scanf("%f", &x1)
fmt.Print("")
fmt.Println("Y1 :")
var y1 float64
fmt.Scanf("%f", &y1)
fmt.Print("")
fmt.Println("Z1 :")
var z1 float64
fmt.Scanf("%f", &z1)
fmt.Print("")
fmt.Println("X2 :")
var x2 float64
fmt.Scanf("%f", &x2)
fmt.Print("")
fmt.Println("Y2 :")
var y2 float64
fmt.Scanf("%f", &y2)
fmt.Print("")
fmt.Println("Z2 :")
var z2 float64
fmt.Scanf("%f", &z2)
fmt.Print("")
var Xcalc = x2 - x1
var Ycalc = y2 - y1
var Zcalc = z2 - z1
var calcX = math.Pow(Xcalc, 2)
var calcY = math.Pow(Ycalc, 2)
var calcZ = math.Pow(Zcalc, 2)
var allcalc = calcX + calcZ + calcY
fmt.Println("the result is :")
fmt.Println(math.Sqrt(allcalc))
}
但更简单的方法是只使用并跳过整个格式字符串:
fmt.Scanf("%f\n", &x1)
Scanln、Fscanln和Sscanln在换行时停止扫描,并要求项目后面跟着换行或EOF
扫描仪功能fmt.ScanXXX返回成功扫描的项目数和错误。要判断扫描是否成功,必须检查其返回值,例如:
fmt.Scanln(&x1)
不要忽略Scanf返回的错误。
if _, err := fmt.Scanln(&x1); err != nil {
fmt.Println("Scanning failed:", err)
}