본문 바로가기
programing/C++

C++ 입출력 함수

by RedWiz 2015. 5. 14.

- 입력함수 : getc(), fgetc(), gets(), fgets(), scanf(), scanf_s()

 

> fgets()와 scanf_s() 는 공간의 최대 크기를 입력해야함 (아니면 버퍼에 문자열 남음)

>> gets()와 scanf() 보다 안전한 방법 이므로 추천

 

> 보통 입력 버퍼를 읽을 때 입력 버퍼 공간에 문자가 남아 있으면 한 문자 지우고 받음

 

> scanf_s()는 공백 문자를 만나면 공백 문자 앞에서 문자열을 입력받고 공백 문자를 버퍼에 남김

 

* scanf_s() 다음에 fgets()나 fgetc() 사용시 주의 해야함

> fgets()는 개행 문자('\n')를 만나면 개행 문자까지 문자열을 입력받고 개행 문자를 포함 시킴

> fgetc()는 개행 문자('\n')를 만나면 하나의 문자로 침

> gets()는 개행 문자('\n')를 만나면 개행 문자까지 문자열을 입력받고 개행 문자를 포함 안함

* cin 은 내부적으로 scanf_s() 기반이므로 같이 주의 해야함

 

* fgets()는 파일을 읽을 때  버퍼크기-1 만큼 문자를 읽고 버퍼의 마지막 문자를 '\0'으로 만듦

 

* 입력버퍼를 청소하려면 fflush(stdin)나 버퍼 맨 앞 개행 문자 하나를 없애려면 fgetc(stdin)

(linux에서는 의미가 다르니 fgetc(stdin)을 주로 사용할 것)

 

> scanf_s()는 입력을 받고 개행을 하지만

fgets()는 입력을 받고 개행을 안한다.

 

* int(4byte)를 char(1byte)로 바꿀시

scanf_s()로 공간 4인 char 배열 주소부터 넣으면 int의 4byte크기가 잘 들어 가지만

단순히 int를 char에 대입하여 넣으면 한 공간에 대해서만 대입 되므로 안됨

 

- 출력함수 : putc(), fputc(), puts(), fputs(), printf(), printf_s()

 

> fputs()는 출력하고 개행 안함

> puts()는 출력하고 개행 함

 

cf.

scanf_s(), printf_s() : 키보드와 CRT에 포멧을 가진 형식화된 키보드 입력과 화면 출력

fgets(), fputs() : 파일로부터 문자열의 키보드 입력과 문자열의 화면 출력

 

cf. C4996 오류 <- 추천 함수 쓰라는 오류

쓰고싶으면

#pragma warning(disable:4996)

 

cf. 파일 입출력 함수에는 fread_s(), fwrite_s() 도 있음

cf. 파일 입력시 fread_s()에 비해서 fgets(), gets()는 한 줄씩(개행문자까지) 읽어서 편리함.

 

 

ps. gets() puts() 동작 외우기 꼬이니 fgets() fputs()를 위주로 사용

fgets()가 버퍼에서 개행문자까지 읽고 문자열에 포함하는 것만 알아도 될듯


ps. 파일 입출력시 fopen의 모드 주의 할것

txt 파일은 t(text)로, 나머지는 b(binary)로

t모드로 쓴 파일을 읽을경우 4KByte 밖에 파일을 읽지 않음

 

'programing > C++' 카테고리의 다른 글

code, data(bss), heap, stack  (0) 2015.05.22
함수 호출 규약  (0) 2015.05.19
분기문, 반복문  (0) 2015.05.07
자료형  (0) 2015.05.07
연산자  (0) 2015.05.07