Go 控制台输入

package main

import (
    "fmt"
    "math/rand"
)

/*指定范围生成随机数*/
func main() {
    for i := 0; i < 10; i++ {  // 生成 10 次
        a := rand.Intn(1000)  // 左闭右开
        fmt.Println(a)
    }
}

猜测商品价格,商品价格随机生成

- rand.Intn(n)

生成从 [0,n) 的随机数,不加随机种子,每次遍历获取都是重复的一些随机数据(伪随机数)。

- rand.Seed(time.Now().UnixNano())  //rand.Seed(time.Now().Unix())

设置随机数种子,加上这行代码,可以保证每次随机都是随机的。


package main

import (
"fmt"
"math/rand"
"time"
)

func main() {
var price int
sum := 0
// 生成商品价格
rand.Seed(time.Now().Unix())
value := rand.Intn(100) // 随机数生成范围 [0,100)
fmt.Println("商品价格为:",value)

// 判断循环,switch { case ...} 语句也可以
for true { // 死循环,猜测不到一直运行,不想死循环可以 for i:=0;i<=n;i++ {}
fmt.Println("请输入猜测价格:")
fmt.Scan(&price)
if price > value {
fmt.Println("价格过高")
sum++
continue
} else if price < value {
fmt.Println("价格过低")
sum++
continue
} else if price == value {
fmt.Println("价格正确")
sum++
break
} else {
fmt.Println("格式错误")
sum ++
continue
}
}
fmt.Printf("猜测次数为 %v",sum)
}

package main

import (
    "fmt"
    "math/rand"
    "time"
)

func main() {
    var price,count int
    rand.Seed(time.Now().Unix())
    real_price := rand.Intn(300)

    for {
        fmt.Println("请输入商品价格:")
        fmt.Scan(&price)
        switch {
        case price == real_price:
            count++
            fmt.Println("价格正确")
            goto end
        case price > real_price:
            count++
            fmt.Println("价格过高")
            continue
        default:
            count++
            fmt.Println("价格过低")
            continue
        }
    }
end:
    fmt.Println("猜测次数:",count)
}

将循环判断封装成函数

package main

import (
    "fmt"
    "math/rand"
    "time"
)

var (
    price int
    count int
)

func main() {
    b := test()
    fmt.Println("总共猜中的次数:", b)
}

func test() int {
    //生成商品的价格
    rand.Seed(time.Now().Unix())
    real_price := rand.Intn(300)

    for {
        //输入价格
        fmt.Println("请输入商品价格:")
        fmt.Scan(&price)
        switch {
        case price == real_price:
            count++
            fmt.Println("恭喜猜中了商品价格:", real_price)
            return count  // return 是函数的出口,return 返回 count 的值给 int,int 传给 b
        case price > real_price:
            count++
            fmt.Println("猜得价格过高")
            continue
        default:
            count++
            fmt.Println("猜得价格过低")
            continue
        }
    }
}

---------------------------------------------------------------------------------------------------------------------------------------

package main

import (
    "bufio"
    "fmt"
    "os"
)

func main() {
    fmt.Println("请输入内容:")
    str1 := getInput()
    fmt.Println(str1)
}

// bufio 建立缓冲区,os.Stdin 确定输入位置
func getInput() string {
    // 使用 os.Stdin 开启输入流
    // NewReader 创建一个默认大小缓冲区
    in := bufio.NewReader(os.Stdin)
    // in.ReadLine 函数具有三个返回值 []byte bool error
    // 分别为读取到的信息,是否数据太长导致缓冲区溢出,是否读取失败
    str,_,err := in.ReadLine()
    if err != nil {
        return err.Error()
    }
    return string(str)
}

package main

import (
    "bufio"
    "fmt"
    "os"
)

func main() {
    fmt.Println("请输入内容:")
    str1 := getStrInput()
    fmt.Println(str1)
}


func getStrInput() string {
    var str string
    // 创建 bufio 缓冲区,利用 NewScanner 加载控制台输入
    in := bufio.NewScanner(os.Stdin)

    if in.Scan() {
        str = in.Text()
    } else {
        str = "not found"
    }
    return str
}

posted @ 2022-03-22 14:54  公博义  阅读(136)  评论(0编辑  收藏  举报