- scanf()정의/ 공백포함 문자열 입력받는 방법
안녕하세요. 오늘은 C언어로 문자열을 입력받는 방법에 대해서 알려드리도록 하겠습니다.
대략적인 3가지 scanf() , gets() , fgets() 를 알려드리겠습니다.
scanf() 정의
#include <stdio.h>
int scanf( const char *format [, argument]...);
scanf 함수란?
표준 입력 스트림(#include <stdio.h>)에서 데이터를 읽고 에서 stdin 지정한 위치에 데이터를 씁니다. argument 각 argument 은 의 형식 지정자(const char *format) 에 해당하는 형식의 변수에 대한 포인터여야 합니다.
따라서 우리는 일반적으로 scanf()를 사용할 때
char a;
scanf("%c",&a);
형식지정자 format인 "%c" 에 해당하는 형식의 변수 a 에 대한 포인터 주소 &를 붙여주는 것입니다.
scanf()함수는 %s 형식 지정자를 사용해서 문자열을 입력 받을 수 있는데 이때 %s형식 지정자를 사용한 scanf("%s",)는
공백(스페이스바) '\0' 나 줄바꿈(엔터키) '\n' 를 입력받기 전까지 문자열을 &주소 변수에 저장합니다. 그리고 \0 이나 \n은 버퍼에 저장하게 됩니다.
그래서 scanf를 연달아서 쓰게 되면 입력은 한번밖에 하지 않았는데 원래의 입력 + 공백or 엔터기 를 입력했을 때 그 두가지 경우가 버퍼에 저장되어 다음 scanf의 입력때 공백이나 \n의 입력이 되는 것입니다.
이를 해결하기 위해서는 scnaf() 사용시 뒤에 getchar(); 를 사용하거나 fflush(stdin)을 사용해서, 공백 or 줄바꿈 이 남아있는 버퍼를 비워주어야 합니다.
<getchar() 문자 한개를 받을수 있는 녀석>
<fflush(stdin)> 출력 버퍼를 비우는 녀석>
문자열 입력 받는 방법 1. scanf() 사용
앞서 설명한 scanf는 공백을 문장의 끝으로 판별하는 성질을 갖고 있습니다. 따라서 우리는 scanf()를 사용해서 공백이 있는 문자열 받기를 원할 때 몇가지의 지정을 해주어야합니다.
#include <stdio.h>
int main(void){
char str[100];
// scanf("%s", &str); // i love you 입력
// printf("%s\n", str); // i 만 출력됩니다.
scanf("%[^\n]s", &str); // i love you 입력(공백 포함 문자열 입력)
printf("%s", str); // i love you 출력됩니다.
return 0;
}
바로 서식 지정자 [^\n] 인데요. 이 듯은 내가 \n 을 입력받기 전까지는 계속해서 문자열을 입력 받을거야~ 라는 뜻입니다.
scanf("%[^\n]s",&변수);
문자열 입력 받는 방법 2. gets() 사용
#include <stdio.h>
int main(void){
char str[100];
gets(str);
return 0;
}
그냥 gets(문자열 변수) 입력해주시면 끝납니다. 정말 쉽죠? (너무편해~)
하지만 어떤.. (백준이라던가) 사이트에서는 gets같은 비 표준적인 함수는 인정이 안됩니다. 참고하세요!!
문자열 입력 받는 방법 3. fgets() 사용
#include <stdio.h>
int main(void){
char str[100];
fgets(str,100,stdin); //stdi.. 표준 입력 buffer에서 문자열을 받아옵니다.
return 0;
}
fgets(변수명,크기,stdin)을 선언하시면 되는데요.
일반적으로 fgets는 FILE을 읽을 때 사용하는 함수입니다. 하지만 stdin을 사용하면 문자열을 입력받을 수 있습니다.!!
'C언어' 카테고리의 다른 글
[c언어] visual studio 2019버전 프로젝트 2015버전에서 여는 방법(v16->v14) (0) | 2021.10.01 |
---|---|
visual studio 모든 버전(2015,2019등) 컴퓨터에서 완전 삭제 방법 (0) | 2021.09.20 |
[C언어] visual studio 2015버전 설치 방법 (6) | 2021.09.11 |
[C언어] 초보자도 구현할 수 있는 테트리스 게임 만들기 ep.1 전반적인 개요(with tetris Algorith) (6) | 2021.09.11 |