프로그램을 사용하는 사용자는 입출력 함수를 통해서 프로그램과 정보를 주고 받을 수 있다.
C에서 흔히 사용하는 입출력 함수의 예는 아래와 같다; printf(), scanf(), getchar(), putchar().
1. 단일 문자 입출력 1: getchar()/putchar()
함수 | 설명 |
getchar() | - 헤더파일: stdio.h - 한 문자를 입력하여 반환 - 파일의 끝에 도달했을 때, EOF값을 반환 |
putchar() | - 헤더파일: stdio.h - 한 문자를 출력 ex) putchar(ch) 변수 ch에 저장된 문자 하나를 출력 |
Note: getchar()와 putchar()의 경우 진짜 함수가 아니며, 전처리기 매크로에 의해서 정의됨
예시)
- 키보드로 입력한 문자를 바로 출력
- EOF 문자(파일끝)를 만나면 프로그램 종료
- 입력의 에코*'의 예시 (버퍼를 사용하지 않는 입력 또는 직접 입력)
#include <stdio.h>
int main(void){
char ch;
while ((ch = getchar()) != EOF){
putchar()
}
return 0
}
프로그램을 종료하기 위해선, "<Ctrl>+Z"를 입력해야 함
* 버퍼
1) 버퍼란: 직접 입력과 다르게 입력 문자들을 버퍼라는 임시 기억 장소에 저장을 함
2) 버퍼를 사용하는 이유?
- 문자들을 묶어서 전달하는 것이 하나씩 전달하는 것보다 시간을 적게 소모함
- 잘못 타이핑했을 경우, 키보드 기능을 이용항 실수를 고칠 수 있음
3) 버퍼를 사용하지 않고 직접 입력을 사용하는 경우?
- 게임과 같이 키를 누르는 즉시 실행이 되어야 하는 경우
4) 버퍼링의 두 가지 방법: 완전 버퍼링, 라인 버퍼링
a. 완전 버퍼링
- 버퍼가 가득 찼을 때, 버퍼의 내용이 출력과 동시에 버퍼가 비워짐
- 일반적으로 파일 입력에서 많이 일어남
- 일반적인 버퍼의 크기는 512 바이트 또는 4096 바이트
b. 라인 버퍼링
- 개행 문자가 나타날 때마다 버퍼가 비워짐
- 일반적인 키보드 입력은 라인 버퍼링
* 파일의 끝 (EOF)
컴퓨터 운영체제는 각각의 파일이 어디에서 시작하고 어디에서 끝나는지 알려주는 방법이 필요함
a. 파일의 끝을 알려주는 방법 1: 파일의 끝을 알려주는 문자(EOF)를 넣음
- 운영체제는 파일의 끝을 표시하기 위해 "Ctrl+Z" 문자를 사용할 수 있음
b. 파일의 끝을 알려주는 방법 2: 운영체제가 파일의 크기에 대한 정보를 저장하는 것
* getchar()와 scanf()의 혼합 사용
#include <stdio.h>
void display(char cr, int lines, int width)
int main(void){
int ch; /* NOTE 1: 출력할 문자*/
int rows, cols; /* 행의 수와 열의 수*/
printf("문자 하나와 두 개의 정수를 입력하시오.\n");
while((ch = getchar()) != '\n'){
if (scanf("%d %d", &rows, &cols) != 2) break;
display(ch, rows, cols);
while(getchar() != '\n') continue; /* NOTE 2 */
printf("또 다른 문자와 두 개의 정수를 입력하시오.\n");
printf("끝내려면 그냥 Enter 키를 누르시오.\n");
}
printf("Bye\n");
return 0;
}
void display(char cr, int lines, int width){
int row, col;
for (row = 1 ; row <= lines; row ++){
for (col = 1 ; col <= width; col ++) putchar(cr);
putchar('\n');
}
}
}
NOTE 1: EOF 검사를 할 수 있도록 문자를 int형으로 읽으나, display 함수에는 char 형으로 전달
NOTE 2: scanf() 함수의 경우
- 수를 읽을 때, 화이트 스페이스, 탭, 개행 문자는 건너뜀
- scanf()는 개행 문자를 입력 큐에 남겨둠
- 따라서, 해당 개행문자를 처리할 수 있어야 함
- scanf()의 리턴값: 성공적으로 읽은 항목 수를 리턴함
문자열 입출력
1. 문자열 입력
문자열을 읽기 위해선 다음을 고려해야한다.
(1) 문자열이 저장될 수 있는 공간을 할당
- 방법 1: char형 데이터의 배열을 선언하여 문자열의 최대 크기를 명시적으로 제한
- 방법 2: malloc()와 같은 메모리를 할당하는 C 라이브러리 함수를 이용
(2) 문자열을 읽는 입력함수를 사용
- C에서는 문자열을 읽기 위해 다음과 같은 함수들을 사용할 수 있다; gets(), fgets(), scanf()
1) gets() 함수
- 대화식 프로그램에서 유용하게 사용될 수 있음
- 사용자 시스템의 표준 입력 장치로부터 하나의 문자열을 얻는 함수
-- gets() 함수가 읽는 문자열은 사용자가 "Enter"를 눌렀을 때 생성되는 개행문자(\n)까지 도달할 때까지의 문자들을 읽음
-- 리턴값:
--- 개행문자를 널문자로 치환 후 해당 문자열을 리턴함 (char 형이 가리키는 포인터 값을 리턴함)
--- 만일 뭔가 잘못되거나 파일의 끝을 만나는 경우에는 NULL(NULL pointer)을 리턴함
- 파일의 끝
- syntax: gets(<char_adress>)
-- char형 배열의 주소를 전달인자로 사용
'프로그래밍 언어 > C, C++의 기본적인 설명' 카테고리의 다른 글
[C/C++] 기본적인 입출력함수 (0) | 2022.02.27 |
---|---|
[C/C++] 디버그, 신텍스 에러, 세만틱 에러 (0) | 2022.02.19 |
[C/C++] 힙(Heap), 스택(Stack) (0) | 2021.08.17 |
[C/C++] C언어 - 구조체 (0) | 2021.06.28 |
[C 언어] 헤더파일 및 분할 컴파일 정리 (0) | 2021.02.05 |
댓글