Windows 上的 Scanf 函数怪癖
在使用 Scanf 进行用户输入时,观察到一个奇怪的行为:它第一次成功检索输入,但会跳过第二个输入请求并突然退出该函数。特别是在 Windows 系统上运行时会遇到此问题。
问题代码:
<code class="go">func credentials() (string, string) { var username string var password string fmt.Print("Enter Username: ") fmt.Scanf("%s", &username) fmt.Print("Enter Password: ") fmt.Scanf("%s", &password) return username, password }</code>
解决方案:
Scanf 对空格作为分隔符的依赖及其不直观的行为可能会产生问题。为了缓解这种情况,使用 bufio 包提供了一种更精细的方法:
<code class="go">func credentials() (string, string) { reader := bufio.NewReader(os.Stdin) fmt.Print("Enter Username: ") username, _ := reader.ReadString('\n') fmt.Print("Enter Password: ") password, _ := reader.ReadString('\n') return strings.TrimSpace(username), strings.TrimSpace(password) // Remove any trailing newline characters }</code>
以上是为什么 Scanf 在 Windows 上跳过输入?详细的解释和解决方案。的详细内容。更多信息请关注PHP中文网其他相关文章!