当前位置:   article > 正文

人生苦短我使用GO——控制台输入_go监听控制台输入

go监听控制台输入

目录

GO控制台输入

                小练习 猜价格

bufio包 


GO控制台输入

        不同基础类型之间的转化 对于不同的基础类型之间的转化,Go提供了strconv包。

        它实现了字符串与其他基本数据类型之间的转化。其中最常用的数值转化函数是Atoi和ltoa,简单了解下它的使用。

        Atoi方法可以将字符串类型的数值直接转化为int类型的数值,而ltoa可以将int类型的数值转化为string类型的值。 示例:控制台输入一个数值,进行数据大小的比较。

  1. package main
  2. import (
  3. "fmt"
  4. "strconv"
  5. )
  6. func main() {
  7. var a string
  8. fmt.Print("请输入一个值")
  9. fmt.Scan(&a)
  10. value, _ := strconv.Atoi(a)
  11. fmt.Printf("转化之后的类型是%T \n", value)
  12. if value >= 100 {
  13. fmt.Println("数值较大")
  14. }
  15. if value < 100 {
  16. fmt.Println("数值较小")
  17. }
  18. }
  19. 请输入一个值88
  20. 转化之后的类型是int
  21. 数值较小

                小练习 猜价格

  1. package main
  2. import (
  3. "fmt"
  4. "math/rand"
  5. "time"
  6. )
  7. //案例:
  8. //猜商品价格,商品高低,商品价格随机生成[0-300)  如果你输入的价格大于商品价格则提示价格过高
  9. //如果你输入的价格低于商品价格提示价格过低,直到猜中商品价格为止,并统计猜的次数
  10. //全局变量
  11. var (
  12. price int
  13. count int
  14. )
  15. func main() {
  16. b := test()
  17. fmt.Println("总共猜中的次数:", b)
  18. }
  19. func test() int {
  20. //生成商品的价格
  21. //随机数
  22. rand.Seed(time.Now().Unix())
  23.  real_price := rand.Intn(300)
  24.  for {
  25. //输入价格
  26. fmt.Println("请输入商品价格:")
  27. fmt.Scan(&price)
  28. switch {
  29. case price == real_price:
  30. count++
  31. fmt.Println("恭喜猜中了商品价格:", real_price)
  32. return count
  33. case price > real_price:
  34. count++
  35. fmt.Println("猜得价格过高")
  36. continue
  37. default:
  38. count++
  39. fmt.Println("猜得价格过低")
  40. continue
  41. }
  42. }
  43. }

 运行结果

  1. PS D:\golang\src\day7\demo2\rand> go run .\main.go
  2. 请输入商品价格:
  3. 200
  4. 猜得价格过高
  5. 请输入商品价格:
  6. 188
  7. 猜得价格过高
  8. 请输入商品价格:
  9. 100
  10. 猜得价格过低
  11. 请输入商品价格:
  12. 250
  13. 猜得价格过高
  14. 请输入商品价格:
  15. 150
  16. 猜得价格过高
  17. 请输入商品价格:
  18. 120
  19. 猜得价格过高
  20. 请输入商品价格:
  21. 110
  22. 猜得价格过低
  23. 请输入商品价格:
  24. 115
  25. 猜得价格过低
  26. 请输入商品价格:
  27. 116
  28. 恭喜猜中了商品价格: 116
  29. 总共猜中的次数: 9

bufio包 

        是通过缓冲来提高效率。

        io操作本身的效率并不低,低的是频繁的访问本地磁盘的文件。所以bufio就提供了缓冲区(分配一块内存),读和写都先在缓冲区中,最后再读写文件,来降低访问本地磁盘的次数,从而提高效率。

        简单的说就是,把文件读取进缓冲(内存)之后再读取的时候就可以避免文件系统的io 从而提高速度。同理,在进行写操作时,先把文件写入缓冲(内存),然后由缓冲写入文件系统。看完以上解释有人可能会表示困惑了,直接把 内容->文件 和 内容->缓冲->文件相比, 缓冲区好像没有起到作用嘛。其实缓冲区的设计是为了存储多次的写入,最后一口气把缓冲区内容写入文件。

Text 将最后一次扫描出的“指定部分”作为字符串返回(值传递)
  1. package main
  2. import (
  3. "bufio"
  4. "fmt"
  5. "os"
  6. )
  7. func main() {
  8. fmt.Println("请输入一个值")
  9. b := getsplnput()
  10. fmt.Println(b)
  11. }
  12. func getsplnput() string {
  13. var a string
  14. //创建bufio缓存区,新建newscanner读取缓存区内容
  15. //其实就是一个扫描
  16. in := bufio.NewScanner(os.Stdin)
  17. //输出的值以文本的形式展示出来
  18. if in.Scan(){
  19. a = in.Text()
  20. //不对的话输出一句话(可以自己定义)
  21. }else{
  22. a = "not faunnt"
  23. }
  24. return a
  25. }
  26. //结果
  27. PS D:\golang\src\day7\demo3\bufio> go run .\main.go
  28. 请输入一个值
  29. "张三"
  30. "张三"

ReadLine 是一个低级的原始的行读取操作
// 大多数情况下,应该使用 ReadBytes('\n') 或 ReadString('\n')
// 或者使用一个 Scanner
//
// ReadLine 通过调用 ReadSlice 方法实现,返回的也是缓存的切片
// ReadLine 尝试返回一个单行数据,不包括行尾标记(\n 或 \r\n)
// 如果在缓存中找不到行尾标记,则设置 isPrefix 为 true,表示查找未完成
// 同时读出缓存中的数据并作为切片返回
// 只有在当前缓存中找到行尾标记,才将 isPrefix 设置为 false,表示查找完成
// 可以多次调用 ReadLine 来读出一行
// 返回的数据在下一次读取操作之前是有效的
// 如果 ReadLine 无法获取任何数据,则返回一个错误信息(通常是 io.EOF)
func (b *Reader) ReadLine() (line []byte, isPrefix bool, err error) 

  1. package main
  2. import (
  3.     "bufio"
  4.     "fmt"
  5.     "os"
  6. )
  7. func main() {
  8.     fmt.Println("请输入内容:")
  9.     str1 := getInput()
  10.     fmt.Println(str1)
  11. }
  12. //缓冲区控制台写入
  13. func getInput() string {
  14.     //bufio 缓冲区从控制台读取输入信息
  15.     in := bufio.NewReader(os.Stdin)
  16.     //从缓冲区中读取字符串信息
  17.     str, _, err := in.ReadLine()
  18.     if err != nil {
  19.         return err.Error()
  20.     }
  21.     return string(str)
  22. }

结果

  1. PS D:\golang\src\day7\demo3\Scanner> go run .\main.go
  2. 请输入内容:
  3. hell
  4. hell

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/790180
推荐阅读
相关标签
  

闽ICP备14008679号