我正在编写一个计算器程序,要求用户输入表达式并打印结果并再次提示输入下一个表达式。
但是,当我使用 fmt.Scanln() 读取一行(带有空格和制表符等空格字符)时,事情发生了!
遇到空格字符时停止读取(是的!不是换行符而是空格字符)。
例如:
输入:2 3.5(5)
获得:2
但是,我还有更糟糕的事情要说!
输入中的其余字符仍然存在,如果我们再次调用 Scanln() 函数,它会读取它们。
fmt 包中还有一个函数 Scanf()。
这家伙不一样!
它根据格式说明符获取输入并将它们存储在我们给出的变量中。
代码:
text := "" fmt.Println("Enter expression:") for { var temp rune fmt.Scanf("%c", &temp) if temp == '\n' { break } text += string(temp) } fmt.Printf("You entered:\n %v", text)
说明:
1.打印“输入表达式:”
2.循环开始
3.现在,循环从用户处获取输入,逐个字符(go 中的 rune by rune)
5.在每次迭代中,我们都会获取该符文并将其添加或附加到我们的文本变量中。
6.当它读取“n”时,它会中断循环,我们会在 text 变量中得到输入行。
7.这里,rune也可以是空格字符.
所以,从字面上看,它甚至读作“n”。
(读取空格字符是 Scanf("%c",&var_name) 的一个例外,这正是我们想要的!)
注意:它还解决了我们读取多行时遇到的问题。我的意思是,当我们读取多行时,我们会得到意外的输入或行为(我不知道确切的原因)原因!)。
但在这里,由于我们正在逐个字符地读取,也包括“n”(到临时变量中),因此将消除所有这些错误!
以上是go中接受带空格的输入的详细内容。更多信息请关注PHP中文网其他相关文章!