我正在阅读Caleb Doxsey的Go书,我对http://www.golang-book.com/4有两个疑问fmt.Scanf
我想知道为什么在第二个Scanf之后程序没有停止并等待用户输入?以及如何测试用户是否输入了整数和/或没有留空?
package main
import (
"fmt"
//"math"
)
// 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
// how do check if the user entered a number
fmt.Print("Enter a number to take its square root: ")
var inputSquare float64
fmt.Scanf("%f", &inputSquare)
// why doesn't program stop after
// the Print statement and wait
// for user input?
fmt.Print("Enter first guess ")
var inputGuess float64
fmt.Scanf("%f", &inputGuess)
//x = 2
x = inputSquare
y = inputGuess
for i := 0; i < 10; i++ { //set up the for loop for iterations
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
} //for the next loop
fmt.Println("y --> ", y)
//fmt.Println("Sqrt(2)", math.Sqrt(2))
}
这是发行5391:fmt
:Scanf
拒绝\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
我正在努力学习如何正确使用async Wait,但我对它有点共同的想法。 在片段中,我试图构建一个对象数组,其中包含我需要的关于我在组件中上传的文件的信息。问题是this.fileInfo中的对象并没有完全等待返回编码图像的promise,而是在我console.logthis.fileInfo时返回此输出: 如您所见,关键图像是一个值未定义的ZoneAwarePromise。你能帮我修一下吗?
我正在编写一个棋盘游戏,我需要检查玩家正在移动的敌人并提示进行攻击。但是,由于游戏是如何制作的,移动方法是在JavaFX应用程序线程上调用的,我希望能够提示用户是否要与敌人战斗。 我的对话框工作正常,使用等待和通知,在主线程上不工作,会导致程序崩溃,有人知道如何暂停这个线程的执行,直到用户单击其中一个按钮。 我为描述道歉,太晚了。 检查敌人的方法该方法检查敌人,如果用户选择是,则返回敌人。它运行在
尝试学习Async/await(以下代码),等待在2s后返回用户名。(返回一个promise)然后只记录接收到的用户名。 问题是then方法中的记录了。 不确定这里出了什么问题。很感谢解释一下这里到底发生了什么。 多谢了。
问题内容: 我正在尝试制作一个暂停用户输入的简单命令。我认为在Bash脚本中它将很有用。 这是我的代码: 它甚至不会暂停供用户输入。 我之前尝试过使用getch()(ncurses)。发生的是,屏幕变黑了,当我按下一个键时,它又回到了原来的屏幕上,我看到了: 这是我想要的。但是我想要的只是DOS / Windows 中的命令(我使用Linux)。 问题答案: 从GNU C库手册: 函数:char
问题内容: 我必须为计算机科学课做一个项目。问题是: 图书馆的顾客最多可以借三本书。因此,一个顾客有一个名字和最多三本书。一本书有作者和书名。设计并实现两个类,分别是Patron和Book,以表示这些对象和以下行为: 客户可以实例化带有标题和作者的书 客户可以检查但不能修改书名或作者 客户可以向顾客询问是否借用了给定的书(按书名识别)。 客户可以告诉顾客退还给定的书(按书名识别)。 客户可以告诉顾