通过golang中的fmt.Scanln()获取用户输入时出现问题

通过golang中的fmt.Scanln()获取用户输入时出现问题,go,input,buffer,user-input,Go,Input,Buffer,User Input,我试图通过使用fmt.Scanln在golang的控制台从用户那里获取输入。它在正常情况下工作正常。但是,每当我在循环中获取输入时,输入在第一次迭代中是正确的,但是在循环的下一次迭代中,会在收到的字符串前面添加一个额外的笑脸。我不知道是什么问题。如果有人提出一些解决方案,我将非常感激 func (a *Block) fillBlock() { fmt.Println("Block Details:") fmt.Print("Enter Block Name: ") fmt.Scanln(&

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

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)
}
}

这是错误的:

    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)