We are Architect

fmt 패키지를 통한 표준 입출력(7) 본문

Programing/Go

fmt 패키지를 통한 표준 입출력(7)

the best infra 2025. 1. 6. 10:14

* fmt 패키지

  • 입출력을 가능하게 하는 패키지

 

 

* 표준 입출력

  • 사용자는 프로그램과 입력출력으로 대화를 한다.
  • 입력은 키보드와 마우스, 출력은 모니터로 이루어진다.

 

 

* 표준 출력 함수

  • 기본적으로 모니터(터미널)에 출력이 된다.
함수 설명
Print() 함수 입력값들을 출력. 
Println() 함수 입력값들을 출력하고 한 줄 내림.
Printf() 서식에 맞도록 입력값들을 출력.

 

 

 

* 표준 출력 예제 

  • Print() : 일반 출력
  • Println() : 일반 출력 + 한 칸 띄기 + 개행 (이때 서식 문자는 %v 로 적용됨.)
  • Printf() : 서식 문자 있는 곳에 변수 값 반영
    • 서식 : 출력대상의 형태를 지정해주는 문
    • %d : 정수 출력(음수 + 양수)
    • %f : 실수 출력 (음수 + 양수)
    • \n : 한 줄 내림
    • \t : 한 칸 탭
    • %t : 어떤 타입인지 출력
    • %v : 데이터 타입에 맞춰서 기본 형태로 출력(거의 이것만 사용하면 알아서 출력)
    • %b : 2진수 형태로 출력
    • %e : 지수형태로 출력
    • %g : 출력의 길이가 길면 지수 형태, 작으면 실수 형태. (기준은 소수점 6자리 이상)
    • %s : 문자열 출력
    • %q : 특수 문자도 그대로 출력
    • %5d : 우측으로 5칸 밀어서 출력
    • %05d : 우측으로 5칸 밀어서 출력, 빈칸은 0으로 매꾼다.
    • %-5d: 좌측으로 5칸 밀어서 출력
// 프로그램 시작점을 포함하고 있다.
package main

// fmt라는 패키지를 사용하겠다.
import "fmt"

func main() {
	var a int = 10
	var b int = 20
	var f float64 = 32.1234

	fmt.Print("a:", a, "b:", b, "f:", f)
	fmt.Println("a:", a, "b:", b, "f:", f)
	fmt.Printf("a: %d b: %d f: %f\n", a, b, f)

}

 

  • 출력 결과

 

 

 

* 표준 입력 함수

  • 기본 입력값을 받는다. (키보드)
함수 설명
Scan() 표준 입력에서 값을 입력 받음.
Scanf() 표준 입력에서 값을 서식 형태로 값을 입력 받음.
Scanln() *표준 입력에서 한 줄 내리고 값을 입력 받음.(자주 쓰임)

 

 

* 표준 입력 예제 

  • &a, &b에는 입력 받은 값들이 각자 들어간다.
package main

import "fmt"

func main() {
	var a int // 기본 값은 0이 들어간다.
	var b int

	n, err := fmt.Scanln(&a, &b) // &(어퍼스트로피)는 해당 변수의 주소값을 나타냄.
	if err != nil {
		fmt.Println(err)
	} else {
		// Println > 메모리 공간 / (n, a, b) > 데이터 값
		fmt.Println(n, a, b) // n은 입력 받은 갯수가 들어감.
	}
}

 

  • 출력 결과

 

 

* 입력 버퍼

  • 키보드로부터 입력받아 온 값을 보관하는 곳을 입력 버퍼라고 한다.
  • 우측부터 차례대로 값이 버퍼에 임시로 저장되고 읽고 출력된다. 
  • 입력 실패 했을 때 입력 버퍼가 지워진다.
\n 4   o l l e H

 

 

* 입력 버퍼 예제 

  • 입력 관련 핵심만 보자. 
package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	stdin := bufio.NewReader(os.Stdin) // Stdin : 표준 입력을 나타낸다.(os 패키지 안에 있음)

	var a int
	var b int

	//Scanln은 두 가지 값을 받아 온다. n: 입력값, err: 에러 발생 값
	n, err := fmt.Scanln(&a, &b)

	if err != nil {
		fmt.Println(err)
		stdin.ReadString('\n') // ReadString() : 표준 입력에서 어떤 문자열(\n)이 나올 때 까지 읽어라.
	} else {
		fmt.Println(n, a, b)
	}

	n, err = fmt.Scanln(&a, &b)
	if err != nil {
		fmt.Println(err)
		stdin.ReadString('\n') // ReadString() : 표준 입력에서 어떤 문자열(\n)이 나올 때 까지 읽어라.
	} else {
		fmt.Println(n, a, b)
	}
}

 

  • 핵심 구문 
    • Scanln 함수로 입력 값을 받아온다.
    • if 조건문으로 오류값이 없는 게(nil) 아니라면(!=) 
      • 에러를 출력한다. 
      • 그리고 stdin.ReadString은 \n 값이 입력될 때까지 기다리는 함수인데 이미 위에서 Println으로 인해 \n 이 입력되었기에 작업을 수행하고 종료.
    • else 조건문으로 그밖에 상황이라면 
      • n에 있는 입력된 변수의 개수 값
      • a, b 변수에 저장된 값을 출력한다.
	n, err := fmt.Scanln(&a, &b)

	if err != nil {
		fmt.Println(err)
		stdin.ReadString('\n') // ReadString() : 표준 입력에서 어떤 문자열(\n)이 나올 때 까지 읽어라.
	} else {
		fmt.Println(n, a, b)
	}

 

  • 출력 결과

 

'Programing > Go' 카테고리의 다른 글

함수(9)  (0) 2025.01.09
연산자(8)  (0) 2025.01.08
변수 - 3(6)  (0) 2025.01.05
변수 - 2(5)  (0) 2025.01.04
변수(4)  (1) 2025.01.03