为什么要跳过第二个scanf?

时间:2018-01-26 04:59:39

标签: go

我决定看一下Go,我目前正在坚持一些事情。在这个程序中,我要求用户选择选项1或2.如果选择了选项1,我希望ReadAppList函数向用户询问姓氏。

似乎第二个scanf被跳过并且不允许用户输入姓氏。它只是读取第一个用户输入吗?

package main

import (
    "fmt"
)


// Main function that runs on startup
func main() {

    fmt.Println("\n1. Search Last Name ")
    fmt.Println("\n2. Exit ")
    fmt.Println("\nPick an option: ")
    var userAnswer int
    fmt.Scanf("%d", &userAnswer)

    if userAnswer == 1 {

        ReadAppsList()

    } else if userAnswer == 2 {

        fmt.Println("\nGoodbye.")

    } else {

        fmt.Println("\nThat is not a valid choice.")

    }
}

func ReadAppsList() {

    fmt.Println("\nType your LastName of the person you want to look up: ")
    var lastName string
    fmt.Scanf("%s", &lastName)
    fmt.Sprintf("You typed %s", lastName)
}

2 个答案:

答案 0 :(得分:1)

在ReadAppsList中,您有:

fmt.Sprintf("You typed %s", lastName)

问题是Sprintf返回一个字符串而不写入屏幕。将其更改为Printf,然后打印姓氏。

姓氏Scanf正在发生,正如您所期望的那样。

答案 1 :(得分:1)

这是因为第一次扫描没有消耗额外的换行符 将您的scanf更改为此fmt.Scanf("%d\n", &userAnswer)