>  기사  >  백엔드 개발  >  fmt.Scanln 예상치 못한 개행 오류: fmt.Scan과 fmt.Scanln의 차이점은 무엇입니까?

fmt.Scanln 예상치 못한 개행 오류: fmt.Scan과 fmt.Scanln의 차이점은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-10-23 21:27:02483검색

fmt.Scanln Unexpected Newline Error: What's the Distinction Between fmt.Scan and fmt.Scanln?

fmt.Scanln 예기치 않은 줄바꿈 오류: Go의 입력 처리 탐구

많은 Go 개발자가 다음과 같은 경우 "fmt.Scanln 예상 줄바꿈 오류"를 경험합니다. 사용자 입력과 상호 작용합니다. 이 오류를 이해하려면 fmt.Scan 및 fmt.Scanln의 작동 방식을 자세히 살펴보는 것이 중요합니다.

fmt.Scan 및 공백 구분 입력
fmt.Scan은 공백을 읽습니다. 표준 입력과 분리된 입력. fmt.Scan에 제공된 각 인수는 공백으로 구분된 단일 단어 또는 값에 해당합니다. 개행 문자의 존재는 공백으로 처리되어 여러 줄 입력이 가능합니다. 이는 다음 코드로 예시됩니다.

<code class="go">import "fmt"

func main() {
  var i int
  _, err := fmt.Scan(&i)
  if err == nil {
    fmt.Println("read 1 integer: ", i)
  }
}</code>

입력 "123"이 제공되면 이 코드는 "1 정수 읽기: 123"을 읽고 인쇄합니다.

fmt.Scanln 및 줄 바꿈 구분 입력
반대로 fmt.Scanln은 줄 바꿈 문자를 구분 기호로 기대합니다. 줄 바꿈까지 모든 입력을 읽은 후 구문 분석을 중지합니다. 이는 Scanln 문서에 명확하게 명시되어 있습니다.

"Scanln은 Scan과 유사하지만 개행에서 스캔을 중지하고 마지막 항목 뒤에는 개행 또는 EOF가 있어야 합니다."

이 동작 다음 코드에서 나타납니다.

<code class="go">import "fmt"

func main() {
  var s string
  _, err := fmt.Scanln(&s)
  if err == nil {
    fmt.Println("read 1 line: ", s)
  }
}</code>

"everybody love ice cream"을 입력하면 이 코드는 "1줄 읽기: 모든 사람이 아이스크림을 좋아합니다"를 읽고 인쇄합니다. fmt.Scanln은 마지막 줄 바꿈으로만 구분되므로 공백으로 구분된 "everybody" 및 "loves"가 있어도 구문 분석이 중단되지 않습니다.

오류 이해하기
In 제공된 초기 예에서 Scanln은 입력 문자열 "everybody love ice cream"이 줄 바꿈으로 끝나지 않기 때문에 "예상 줄 바꿈" 오류가 발생합니다. 이 문제를 해결하려면 입력 끝에 개행 문자가 있어야 합니다.

줄 읽기를 위한 대체 방법
목표가 입력 줄을 읽는 것이라면 ReadString을 사용하세요. bufio.Reader 패키지는 fmt.Scanln에 대한 신뢰할 수 있는 대안입니다:

<code class="go">import (
  "bufio"
  "os"
)

func main() {
  reader := bufio.NewReader(os.Stdin)
  line, err := reader.ReadString('\n')
  if err == nil {
    fmt.Println("read 1 line: ", line)
  }
}</code>

위 내용은 fmt.Scanln 예상치 못한 개행 오류: fmt.Scan과 fmt.Scanln의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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