>  기사  >  백엔드 개발  >  Go 루프에서 유효하지 않은 사용자 입력을 처리하는 방법: 왜 ​​fmt.Scanln()이 해결책입니까?

Go 루프에서 유효하지 않은 사용자 입력을 처리하는 방법: 왜 ​​fmt.Scanln()이 해결책입니까?

Susan Sarandon
Susan Sarandon원래의
2024-10-31 18:25:02961검색

How to Handle Invalid User Input in Go Loops: Why fmt.Scanln() is the Solution?

유효한 사용자 응답을 위해 Go에서 입력 플러시

문제 이해

루프에서 사용자 입력을 읽기 위해 fmt.Scanf()를 활용하는 경우, 잘못된 입력이 입력되면 문제가 발생할 수 있습니다. 사용자의 입력이 예상 형식 이상으로 확장되어 루프가 여러 번 반복될 수 있습니다. 이는 fmt.Scanf()가 잘못된 입력을 자동으로 삭제하지 않아 잘못된 입력 전체가 처리될 때까지 연속적인 오류 메시지 스트림이 발생하기 때문입니다.

fmt.Scanln()으로 문제 해결

stdin을 플러시하고 이 문제를 방지하는 한 가지 솔루션은 fmt.Scanf() 대신 fmt.Scanln()을 사용하는 것입니다. fmt.Scanln()은 개행 문자를 포함하여 전체 입력 줄을 읽도록 설계되었습니다. fmt.Scanln()을 활용하면 개행 문자가 발견되면 입력 프로세스가 종료되어 표준 입력 버퍼를 효과적으로 지우고 후속 입력 시도가 깨끗한 슬레이트로 시작되도록 보장합니다.

사용 예

다음은 fmt.Scanln()을 사용하여 사용자에게 정수 입력을 요청하고 유효하지 않은 입력을 적절하게 처리하는 방법을 보여주는 예입니다.

<code class="go">package main

import (
    "fmt"
)

func main() {
    fmt.Println("Please enter an integer: ")

    var input string
    fmt.Scanln(&input)

    var number int
    _, err := fmt.Sscanf(input, "%d", &number)

    if err != nil {
        fmt.Println("Invalid input. Please enter an integer: ")
        return
    }

    fmt.Println("You entered:", number)
}</code>

이 예에서는 먼저 다음을 사용하여 사용자의 입력을 문자열로 읽습니다. fmt.Scanln(). 이렇게 하면 유효하지 않은 문자가 입력 버퍼에서 플러시됩니다. 마지막으로, fmt.Sscanf()를 사용하여 입력 문자열을 정수로 구문 분석하려고 합니다. 구문 분석이 성공하면 프로그램은 구문 분석된 정수를 사용하기 시작합니다. 구문 분석에 실패하면 사용자에게 입력을 다시 입력하라는 메시지를 표시하고 이전에 입력했을 수 있는 잘못된 입력을 삭제합니다.

결론

fmt.Scanln()을 사용하여 사용자 읽기 루프에서 입력을 사용하면 표준 입력을 효과적으로 플러시하고 유효하지 않은 입력을 정상적으로 처리할 수 있습니다. 이 접근 방식은 보다 강력하고 안정적인 입력 처리 메커니즘을 제공하여 프로그램이 유효한 입력을 얻을 때까지 사용자에게 계속해서 메시지를 표시할 수 있도록 합니다.

위 내용은 Go 루프에서 유효하지 않은 사용자 입력을 처리하는 방법: 왜 ​​fmt.Scanln()이 해결책입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.