在Golang中通过fmt.Scanln()接受用户输入时出现问题

我试图使用fmt.scanln()通过我在Golang的控制台接收用户的输入。它在正常情况下工作正常。但是,每当我在循环中接受输入时,输入在第一次迭代中是正确的,但是在循环的下一次迭代中,在接收到的字符串前面会添加一个额外的smiley。我不知道有什么问题。如果有人提出解决方案,我将非常感激。

func (a *Block) fillBlock() {
fmt.Println("Block Details:")
fmt.Print("Enter Block Name: ")
fmt.Scanln(&a.Data)

for i := 0; i < Students; i++ {
    fmt.Print(i, "Enter Student Roll# ")
    fmt.Scanln(&a.Grades[i].Rollno)
    fmt.Print(i, "Enter Student Grade# ")
    fmt.Scanln(&a.Grades[i].Grade)
}

fmt.Println("\nInput Data:")

fmt.Println("Data: ",a.Data)

// Iterating over each student
for i := 0; i < Students && (a.Grades[i].Rollno != "" && a.Grades[i].Grade != ""); i++ {
    fmt.Println("Rollno: " + string(i) + a.Grades[i].Rollno)
    fmt.Println("Grade: " + string(i) + a.Grades[i].Grade)
}

}
Output


最佳答案:

这是错误的:

    fmt.Println("Rollno: " + string(i) + a.Grades[i].Rollno)

相反,使用
    fmt.Println("Rollno: " + strconv.Itoa(i) + a.Grades[i].Rollno)

或者,更好:
    fmt.Printf("Rollno: %d %s\n",i a.Grades[i].Rollno)