반응형
스트림과 데이터의 이동
데이터는 한 방향으로 이동하는데 이것이 물이 흐르는 것과
유사하여 스트림(물의 흐름)이라 부릅니다.
이 스트림은 입출력장치에 사용된다.
컴퓨터 내부로의 데이터 이동은 입력,
외부로의 데이터 이동은 출력이다.
출력 스트림, 입력 스트림이 존재하기에 데이터 입출력이 가능하다.
입출력 스트림은 OS에서 데이터의 입출력을 위한 소프트웨어를 뜻한다.
스트림 생성 소멸
- stdin : 표준 입력 스트림 / 키보드 대상으로 입력
- stdout : 표준 출력 스트림 / 모니터 대상으로 출력
- stderr : 표준 에러 스트림 / 모니터 대상으로 출력
스트림은 프로그램 시작과 동시에 형성되고 종료시 소멸된다.
출력 리다이렉션이라는 것을 통해서 stdout과 stderr이
향하는 데이터 전송 방향을 달리 할 수 있다.
문자 입출력 함수
- 하나의 문자 출력 함수
함수호출 성공 시 문자정보, 실패 시 EOF 반환
EOF란 ? define상수 : -1
int putchar(int c); // 인자로 전달된 문자를 출력
int fputs(int c, FILE* stream); // 두 번째 인자를 통해서 출력대상 지정
- 하나의 문자 입력 함수
파일 끝에 도달, 함수 호출 실패 시 EOF 반환
int getchar(void); // 입력된 문자 정보 반환
int fgets(FILE* stream); // 입력 받을 대상정보 인자로 전달
문자 입출력 예제
int ch1, ch2;
scanf("%c", &ch1); // 123 입력, ch1 = 1
ch1 = getchar(); // 2 입력
ch2 = fgetc(stdin); // 3 입력
putchar(ch1); // 2 출력
fputc(ch2, stdout); // 3 출력
콘솔창에서의 Ctrl + Z 는 EOF를 뜻한다.
puts, fputs : 문자열 출력 함수
성공 시 0이 아닌 값을, 실패 시 EOF 반환
int puts(const char* s); // 문자열 출력 후 개행O
int fputs(const char* s, FILE* stream); // 문자열만 출력, 개행X
gets, fgets : 문자열 입력 함수
파일의 끝에 도달하거나 함수호출 실패 시 NULL 포인터 반환
- gets : 입력된 문자열의 길이가 배열을 넘어설 경우 할당 받지 않은 메모리 참조하는 오류 발생
- fgets : 입력을 널 문자를 포함하여 n의 크기만큼 str에 저장한다.
char* gets(char* s); // 문자열 입력
char* fgets(char* s, int n, FILE* stream); // 문자열 입력
fgets 함수 예제
아래의 예제에서 fgets는 최대 6개의 문자를 입력받을 수 있다.
입력이 6개를 넘으면 그 다음 fgets로 넘어가게 되고, 6개를 안넘으면
입력을 계속 받는다. 엔터키와 공백또한 문자열로 받는다.
char str[7];
for(int i = 0; i < 3; i++)
{
fgets(str, sizeof(str), stdin);
printf("Read %d: %s \n", i+1, str);
}
// 입력 1 : 1234567890124567890
// Read 1: 123456
// Read 2 : 789012
// Read 3 : 345678
// 입력 2: Hi
// Read 1 : Hi
// 입력 : Hello
// Read 2 : Hello
// 입력 : good morning
// Read 3 : good m
반응형
반응형