scanf()와 printf()로 문자, 문자열의 입출력을 실행합니다.
char ch;
scanf("%c", &ch);
printf("%c \n", ch);
char st[30];
scanf("%s", &st);
printf("%s \n", st);
하지만 scanf()와 printf()는 문자, 문자열 외에도 처리하는 자료형이 많기 때문에 무거운 편입니다.
그래서 문자와 문자열에 사용하는 입출력 함수에 대해 알아보겠습니다.
문자 입력 함수에 대해 알아보겠습니다
getchar()는 하나의 문자를 읽어서 반환하는 함수입니다.
char ch;
ch = getchar();
입력할 때는 여러 개의 문자를 입력할 수 있지만 반환은 첫 번째로 입력된 한 개의 문자만 반환합니다.
conio.h의 _getch()또는 getch()도 하나의 문자를 읽어서 반환하는 함수입니다. getchar()와 다른 점은 버퍼를 사용하지 않는다는 점입니다.
char ch;
ch = _getch();
_getch()는 getchar()처럼 입력을 받고 엔터를 치면 입력이 끝나는게 아니라 한 개의 문자를 누르는 순간 입력이 끝나고 다음으로 넘어갑니다. 버퍼를 사용하지 않기 때문입니다. 즉각적인 입력을 받을 때 많이 사용합니다. 그리고 입력받은 문자를 화면에 표시해주지 않습니다.
*_getch()또는 getch() 둘 다 됩니다. 하지만 getch()보단 _getch()로 사용하길 권장하고 있습니다.
*stdio.h에서도_getch()또는 getch()가 실행됩니다. 하지만 warning이 발생합니다. conio.h선언 후 사용해주세요.
다음으로 문자 출력 함수는
putchar()입니다. getchar()와 대응하는 문자 출력 함수입니다.
char ch='c';
putchar(ch);
conio.h의 _putch()또는 putch()도_getch()와 getch()에 대응하는 문자 출력 함수입니다.
char ch='c';
_putch(ch);
다음으로 문자열 입출력 함수입니다.
문자열 입력 함수 gets()입니다.
char st[30];
gets(st);
한 가지 주의할 점은 충분한 배열의 크기가 선언되어있어야 합니다. gets()는 입력되는 모든 문자열을 저장하려고 합니다. 그렇기 때문에 배열의 크기를 넘어가버리면 에러가 발생해버립니다.(scanf()도 마찬가지입니다.)
그래서 gets_s()를 사용합니다.gets_s()는 배열의 크기가 같이 인자로 입력됩니다.
char st[12]= "Hello World";
gets_s(st,sizeof(st));
*gets()는 사용 시 warning이 발생합니다.
문자열 출력 함수는 puts입니다.
char st[30]="Hello World";
puts(st);
gets()는 scanf()와 큰 차이가 있습니다. 바로 공백의 인식 차이입니다.
scanf()는 Hello World를 입력받고 엔터를 누르면 Hello만 입력이 됩니다.
하지만 gets()는 Hello World전체를 입력받습니다. gets()는엔터(\n)가 입력되기 전까지의 모든 값을 저장합니다. 문자열의 입력에는 gets()가 더 유리한 점이 있는 거죠.
char st[100];
gets_s(st,sizeof(st));
puts(st);
char st[100];
scanf("%s", &st);
printf("%s \n", st);
'공부 자료실 > C언어' 카테고리의 다른 글
C언어 - 공용체 (0) | 2020.07.01 |
---|---|
C언어 - 문자열 변환 (0) | 2020.06.30 |
C언어 - 문자열과 포인터 (0) | 2020.06.29 |
C언어 - 문자열 (0) | 2020.06.29 |
C언어 - 구조체 (0) | 2020.06.27 |
댓글