чтение того же ввода с помощью bufio и scanf дает разные результаты - PullRequest
0 голосов
/ 13 января 2020

Я пытался написать простую программу, которая читает некоторые ответы из терминала от пользователя на некоторые вопросы. Например, запросы:

5+5
1+2
8+3

, и пользователь должен дать ответ. Моя проблема это когда я использую bufio.ReadString и сравниваю ввод с реальным ответом, он не работает должным образом, однако когда я использую scanf, все в порядке. Вот мой код:

//scanner := bufio.NewReader(os.Stdin)

    var correctAnswers int8 = 0

    for _, pro := range problems {
        fmt.Println(pro.question)
        //answer,_ := scanner.ReadString('\n')
        var idk string
        fmt.Scanf("%s\n", &idk)
        //print(answer)
        println(pro.answer)
        if idk == pro.answer {
            fmt.Println("Correct :)")
            correctAnswers++
        } else {
            fmt.Println("Sorry!")
        }

    }
    fmt.Printf("You answered %d out of %d problems correctly \n", correctAnswers, len(problems))

как видите, я закомментировал bufio. Интересно то, что когда я печатаю ответ, который дал мне пользователь, bufio.ReadString правильно получил ввод с терминала, но в предложении if он не работает!

1 Ответ

1 голос
/ 13 января 2020

bufio.Reader.ReadString:

ReadString считывает до первого появления разделителя во входных данных, возвращая строку, содержащую данные до и , включая разделитель .

Значение, возвращаемое из ReadString, включает \n в конце.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...