Ошибка при переборе проанализированного CSV, pani c: ошибка времени выполнения: индекс вне диапазона [0] с длиной 0 - PullRequest
0 голосов
/ 01 апреля 2020

Я пытаюсь выполнить это упражнение, которое принимает в виде csv некоторого простого дополнительного вопроса / ответов и запрашивает ответ у пользователя, сохраняя при этом количество правильных ответов. Каждая строка csv выглядит примерно так: «5 + 5,10»

Однако я продолжаю получать эту ошибку после того, как задан последний вопрос, и не могу понять, где она происходит.

panic: runtime error: index out of range [0] with length 0

goroutine 1 [running]:
main.main()
    ~/main.go:23 +0x260
exit status 2

это мой код

package main

import (
    "encoding/csv"
    "fmt"
    "io"
    "os"
)

func check(e error) {
    if e != nil {
        panic(e)
    }
}

func main() {
    score := 0

    file := "problems.csv"
    questionSet := parseCsv(file)

    for _, v := range questionSet {
        question := v[0]
        answer := v[1]
        fmt.Println("What is", question)
        ua := userAnswer()
        if validateAnswer(ua, answer) {
            score++
        }
    }

    fmt.Println("Your score is", score)
}

func parseCsv(filepath string) [][]string {
    var questions [][]string

    in, err := os.Open(filepath)
    check(err)

    r := csv.NewReader(in)

    for {
        record, err := r.Read()

        questions = append(questions, record)

        if err == io.EOF {
            break
        }

        check(err)

    }
    return questions
}

func userAnswer() string {
    var answer string
    fmt.Scan(&answer)
    return answer
}

func validateAnswer(userAnswer string, answer string) bool {
    return userAnswer == answer
}

1 Ответ

0 голосов
/ 01 апреля 2020

parseCsv функция должна выглядеть следующим образом, append должна вызываться, только если не произошла ошибка чтения

func parseCsv(filepath string) [][]string {
        var questions [][]string

        in, err := os.Open(filepath)
        check(err)

        r := csv.NewReader(in)

        for {
                record, err := r.Read()

                if err == io.EOF {
                        break
                }

                check(err)

                questions = append(questions, record)

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