1. 표준 입출력
게임을 한다고 치면 게임과 사용자간의 대화가 필요하다.
키보드와 마우스로 입력값을 넣어 화면에 이미지, 소리 등 출력값을 받아야 한다.
온라인게임이라면 출력이 네트워크를 통해서 나간다 라고 보면 된다.
입력은 bit stream형태로 비트의 흐름으로 들어간다.
2. 표준 출력 함수
fmt라는 패키지를 통해서 제공이 된다
fmt패키지 종류는 3가지가 있다.
Print() : 입력값 출력, 띄어쓰기, 줄바꿈 없음
Println() : 입력값들을 출력하고 개행(줄바꿈)한다.
Printf() : 서식에 맞도록 입력값을 출력한다.
3. fmt 패키지 예시
package main
import "fmt"
func main(){
var a int = 10
var b int = 20
var f float64 = 3277994.8797
fmt.Print("a:",a,"b:",b)
fmt.Println("a:",a,"b:",b,"f:",f)
fmt.Printf("a: %d b: %d f: %f \n",a,b,f)
//출력값
//a:10b:20a: 10 b: 20 f: 3.27994387438297e+10
//a: 10 b: 20 f: 32799438743.829700
}
Print는 빈칸없이 출력, Println은 빈칸 하나씩 출력, 출력후 개행(줄바꿈)
Printf의 서식문자 %d 등 : 서식문자 자리에 a,b,f를 순서대로 넣는다.
4. Printf의 서식문자
%v : 데이터 타입에 맞춰서 기본형태로 출력한다. 헷갈릴때 이거 사용하면 된다.
%T : 데이터 타입을 출력
%t : 불리언 true/false 출력
%b : 2진수 출력
%e : 지수형태로 실숫값 출력
%f : 지수형태가 아니라 실수형태
%g : 값이 큰 실수는 지수형태, 작은 실숫값은 실숫값 그대로 출력
%s : 문자열
%q : 특수문자 기능을 동작하지 않고 문자열 그대로 출력
5. Printf 서식문자 응용
package main
import "fmt"
func main(){
var a = 123
var b = 456
var c = 123456789
fmt.Printf("%5d, %5d\n",a,b)
fmt.Printf("%05d, %05d\n",a,b)
fmt.Printf("%-5d, %-05d\n",a,b)
fmt.Printf("%5d, %5d\n",c,c)
fmt.Printf("%05d, %05d\n",c,c)
fmt.Printf("%-5d, %-05d\n",c,c)
}
(1) %5d : 5칸에 맞춰서 출력
123 앞에 2칸을 띄운다.
(2) %05d : 띄어쓰기대신 그자리에 0을 넣는다.
00123
(3) %-5d : 좌측으로 밀어서 출력
123 뒤에 2칸을 띄운다.
(4) %-05d : 빈칸에 0 추가 안된다. 0을 추가해버리면 다른값이 되기때문이다.
(5) c는 9자리인데 %5d를 할경우 : 숫자가 커도 5자리가 아닌 원래 자리수인9자리를 다 출력한다.
(6) 기타 특수문자
\n : 줄바꿈
\t : 탭을 삽입
\\ : \자체를 출력
\" : "를 출력한다. 큰따옴표로 묶인 문자열내부에 따옴표를 넣을때 사용한다.
6. Scan 표준입력
Scan() : 표준입력에서 값을 입력받는다.
Scanf() : 표준입력에서 서식형태로 값을 입력받는다.
Scanln() : 표준입력에서 한줄을 읽어서 값을 입력받는다.
7. Scan 예시
package main
import "fmt"
func main(){
var a int
var b int //기본값에 0이 들어간다.
n, err := fmt.Scanln(&a, &b) //&(앰퍼샌드) : 변수앞에 앰퍼샌드를 넣어주면 메모리주소값을 가리킨다.
if err != nil{
fmt.Println(err)
} else{
fmt.Println(n,a,b)
}
}
8. Scan 입력버퍼
입력버퍼에는 입력된 것을 읽는다.
Hello 4 를 입력했을때
첫번째 글자가 숫자가 아니면 error를 반환하게 하려고 한다.
이때 H를 먼저 읽고 숫자가 아니기 때문에 error를 반환한다.
그다음 e를 읽고, l,l,o 를 다 읽고 error를 반환한 후 4에서 error가 나지 않는다.
ReadString을 쓰면 개행문자가 나올때까지 버퍼를 비워준다.
즉 Hello 에서 H라는 글자만 읽고 다음 띄어쓰기 까지 ello를 읽지 않는 다는 것이다.
9. Scan 응용
package main
import (
"bufio"
"fmt"
"os"
)
func main(){
stdin := bufio.NewReader(os.Stdin) //표준 입력을 나타낸다
var a int
var b int
n, err := fmt.Scanln(&a, &b)
if err != nil{
fmt.Println(err)
stdin.ReadString('\n')
} else{
fmt.Println(n,a,b)
}
n, err = fmt.Scanln(&a, &b)
if err != nil{
fmt.Println(err)
stdin.ReadString('\n')
} else{
fmt.Println(n,a,b)
}
}
'개발 > Go' 카테고리의 다른 글
[Go] 함수(function) (0) | 2022.08.10 |
---|---|
[Go] 연산자 (0) | 2022.08.10 |
[Go] Golang 기초 - 3 (0) | 2022.08.02 |
[Go] Golang 기초 - 2 (0) | 2022.08.02 |
[Go] Golang 기초 - 1 (0) | 2022.07.26 |