본문 바로가기

프로그래밍/C language

7. Input and Output

7.1 Standard Input and Output

- 표준 입출력에 관한 함수는 header file인 <stdio.h>에 들어가 있음
- getchar, putchar, printf 등을 이용하여, 표준 입력/출력을 구현

ex) command line 명령어를 이용한 입/출력 

prog >infile //  input : infile, 실행프로그램 : prog
otherprog | prog // input : otherprog의 결과, 실행프로그램 : prog

7.2 Formatted Output - Printf

- Printf는 표준 출력을 지원함
- int printf(char *format, arg1, arg2, ...)

ex) 
char p[] = "good"
printf("%-15.10s", p); 
// 출력결과 : 'hello, wor     '
// '-' 는 왼쪽으로 붙여쓴다는 의미, '.' 앞은 공간 자릿수, '.' 뒤는 표현자릿수,'s'는 conversion character, %는 conversion specification의 시작을 알림

7.3 Variable-length Argument Lists

- 함수의 argument에서, argument의 갯수가 가변적으로 변할 수 있도록 선언할 수 있음
- printf함수의 경우, argument의 갯수는 그때그때 마다 다름

ex) 
int printf(char *fmt, ...); 
//argument list가 가변적인 함수의 선언
// ... 부분의 이름이 정해지지 않은 argument들은 va_list라는 pointer가 가리키고 있음

7.4 Formatted Input - Scanf

- Scanf는 표준 입력을 지원함
- int scanf(char *format, arg1, arg2, ...)
- argument는 반드시 pointer가 들어가야 함
- 각 입력에 대한 구분은 white space를 통해서 이루어짐

ex) 
int day, year;
char monthname[20];
scanf("%d %s %d", &day, monthname, &year);

7.5 File Access

- 외부 file에 있는 것들을 표준 입력으로 사용하거나, 표준 출력을 이용해 수정하고 싶을 때는 파일을 열어야함
- 마지막에는 열었던 파일을 반드시 닫도록 함

ex) 
FILE *fp //FILE은 typedef로 정의된 int와 같이 자료형임

fp = fopen(file_name, mode) 
// 외부 파일을 각종 모드로 열기
// mode는 r(읽기), w(쓰기), a(덧붙이기)중 하나가 될 수 있고, 바이너리 파일일 경우, 'rb'와 같이 씀 

int getc(FILE *fp) // 연 파일을 표준입력으로 받음
int putc(int c, FILE *fp) //연 파일에 표준출력으로 값 c를 보냄

#define getchar() getc(stdin) // getchar()은 getc에서 file을 stdin(보통은, keyboard)로 설정한것과 동일
#define putchar(c) putc((c), stdout) // putchar()은 putc에서 file을 stdout(보통은, screen)으로 설정한 것과 동일

int fclose(FILE *fp) 
//fp가 다른 것을 가리킬 수 있도록 열었던 파일을 닫음
//buffer flush가 일어남

7.6 Error Handling - Stderr and Exit

- stderr은 stdin, stdout과 같은 file pointer이며, 표준에러출력(보통은, 모니터)
- exit()은 프로그램에서 에러등이 발생했을 경우 사용하며, 즉시 프로그램을 종료시킴
- exit()은 main함수에서 return문을 사용하는 것과 동일함. 
- 에러의 판별은, ferror, feof와 같은 함수를 이용하여 판별가능

ex) 
exit(1) //main문에서 return 1을 한것과 동일, 즉 비정상적인 상태임을 알리고 프로그램 강제종료

int ferror(FILE *fp) //fp에 에러가 있을 경우 0이아닌값 출력
int feof(FILE *fp) //fp가 eof가 발생할 경우 0이아닌값 출력

7.7 Line Input and Output

- fgets, fputs함수를 이용하여 파일에 문자열등을 꺼내는/집어넣는 line 입/출력을 구현할 수 있음

ex) char *fgets(char *line, int maxline, File *fp); //fp에서 maxline-1길이의 문자열까지 한번에 읽어들임
char *fputs(char *line, FILE *fp); //fp에 문자열을 씀

7.8 Miscellaneous Functions

- Appendix참조

'프로그래밍 > C language' 카테고리의 다른 글

8. The UNIX System Interface  (0) 2021.09.03
6. Structures  (0) 2021.08.14
5. Pointer and Arrays  (0) 2021.08.11
4. Function and Program Structure  (0) 2021.03.29
3. Control Flow  (0) 2021.03.29