登录
首页 >  Golang >  Go问答

如何实现程序的输入等待?

来源:stackoverflow

时间:2024-02-08 23:18:21 422浏览 收藏

大家好,今天本人给大家带来文章《如何实现程序的输入等待?》,文中内容主要涉及到,如果你对Golang方面的知识点感兴趣,那就请各位朋友继续看下去吧~希望能真正帮到你们,谢谢!

问题内容

如果我运行下面的程序并输入答案(例如“3 年”),程序就会完成,而无需等待任何进一步的输入,例如:

how long did the christians walk for the crusade? :3 years
correct!
how many of the crusades were won by christians? :incorrect.
who started the crusades? :incorrect.
thank you for playing!

如何让它等待其他问题的答案?

package main

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

func main() {
    scanner := bufio.NewScanner(os.Stdin)
    fmt.Printf("How long did the christians walk for the crusade? :")
    scanner.Scan()
    input := scanner.Text()

    if input == "3 years" {
        fmt.Println("Correct!")
    } else {
        fmt.Println("Incorrect.")
    }

    fmt.Printf("How many of the crusades were won by christians? :")

    if input == "1" {
        fmt.Println("Correct!")
    } else {
        fmt.Println("Incorrect.")
    }

    fmt.Printf("Who started the crusades? :")

    if input == "the pope" {
        fmt.Println("Correct!")
    } else {
        fmt.Println("Incorrect.")
    }

    fmt.Printf("Thank you for playing!")
    time.Sleep(2 * time.Hour)
}

正确答案


scanner.scan()
input := scanner.text()

上面将接受单行输入并将结果存储在变量 input 中。

因此,当您的程序运行时,它会询问第一个问题并等待答案;假设我回答“1 天”,然后 input ==“1 天”input 的值在此之后不会更改 - 您将用户输入的第一个值与多个答案进行比较,即 "1 day" == "3 年""1 day" == "the pope"

如果您想接受其他线路,则需要重复呼叫,例如

scanner.scan()
input := scanner.text()

if input == "3 years" {
    fmt.println("correct!")
} else {
    fmt.println("incorrect.")
}

fmt.printf("how many of the crusades were won by christians? :")
scanner.scan() // get next answer from scanner
input = scanner.text()

if input == "1" {
    fmt.println("correct!")
} else {
    fmt.println("incorrect.")
}

请注意,您可以通过使用函数来大大简化此过程:

package main

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

func main() {
    s := bufio.NewScanner(os.Stdin)

    askQuestion(s, "How long did the christians walk for the crusade? :", "3 years")
    askQuestion(s, "How many of the crusades were won by christians? :", "1")
    askQuestion(s, "Who started the crusades? :", "the pope")

    fmt.Printf("Thank you for playing!")
}

func askQuestion(s *bufio.Scanner, question string, answer string) {
    fmt.Print(question)
    if !s.Scan() {
        panic(fmt.Sprintf("scan failed: %s", s.Err()))
    }
    if s.Text() == answer {
        fmt.Println("Correct!")
    } else {
        fmt.Println("Incorrect.")
    }
}

本篇关于《如何实现程序的输入等待?》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>