c언어/내장함수

C 문자열 입출력 라이브러리

감조자림 2023. 1. 9. 20:59

# '문자' 입출력 라이브러리

 

▪ getchar >> 하나의 문자를 읽어서 반환한다. (버퍼 사용)

 

 _getch >> 일반적으로 문자를 입력하면 화면에 내가 입력한 문자를 출력해주는데 (<- 이걸 '에코' 라고 부른다) 이 함수는 그런 기능이 없다. (버퍼를 사용하지 않는다)

 

 _getche >> _getch에 에코 기능이 추가된 함수. 다른 차이점은 없다.

 

 putchar(c) >> 변수 c에 저장된 문자를 출력한다. (버퍼 사용)

 

 _putch  >> 변수 c에 저장된 문자를 출력한다.(버퍼를 사용하지 않는다)

 

+ _getch와 _putch는 <conio.h> 를 include 해야 사용할 수 있다.

버퍼를 사용하는 함수는 문자를 입력하고 최종적으로 엔터를 눌러야 입력이 이루어지는데,
버퍼를 사용하지 않는 함수는 문자를 하나 입력하는 순간(키보드를 하나 누르는 순간) 바로 입력이 이루어진다.
따라서 전자는 수정이 가능하고 후자는 수정이 불가능하다.
그리고 버퍼를 사용하는 출력함수는 문자 출력 후, 줄바꿈을 하는데
버퍼를 사용하지 않는 함수는 그렇지 않다.
또한, 문자를 입력하는 함수들은 인자로 int형 인자를 받는다.

 

# 문자'열' 입출력 라이브러리

 

 gets_s(word, 100) >> word라는 문자배열에 최대 입력개수 100으로 입력한다. 한 줄(띄어쓰기 가능)을 입력 한다. 그런데, 이게 오류가 나는 경우가 있다.(이유는 몰루) 그래서 이걸 대체하기 위해선 아래와 같은 함수를 사용하면 된다.

 

▪scanf("%[^\n]%*c", word); >> scanf("%s", word)라고 하면 띄어쓰기를 인식하지 못한다. 하지만 이와같이 하면 띄어쓰기도 하나의 문자로 취급해서 문자열을 받는다. [^\n]은 개행문자가 올 때까지 입력을 받으라는 의미이고, *c의 의미는 문자열을 읽을 때, \n은 빼고 읽으라는 뜻. 그런데 입력하는 문자열의 길이가 배열에 할당된 메모리 공간을 넘으면 문제가 생긴다.

이를 해결하기 위해서 안에서 길이를 적어줄 수도 있다. scanf("%100[^\n]%*c", word); (배열의 크기가 100인 경우)

scanf("%[^\n]s", sen); << 이렇게 해도 된다. 차이점은 모르겠따.

 

 puts >> 문자열을 출력하고 자동으로 줄바꿈을 한다. 출력이 성공적이면 음수가 아닌 값을 반환. 실패하면 EOF를 반환.