본문 바로가기
프로그래밍/C, C++

[C언어] fgets()를 이용해서 여러줄 문장을 입력받자

by JR2 2021. 4. 1.

예제 : codeup.kr/problem.php?id=1022

해결방안 :

1
2
3
4
5
6
7
8
9
#include <stdio.h>
 
int main(void)
{
    char a[2001];
    fgets(a, 2000, stdin);
    printf("%s", a);
    return 0;
}
cs

 

fgets는 무엇이며 어떻게 사용하는 것일까?

우선 C언어에서 문자열을 입력 받으려면 조금 짜증나는것을 알 수 있다.

아래 예시를 잠깐 살펴보자.

1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
 
int main(void)
{
    char a[50];
 
    scanf("%s", a);
    printf("%s", a);
 
    return 0;
}
cs

 

Hello World! 를 입력하고 엔터를 쳐보면, Hello 만 받는걸 알 수 있다.

그 이유는 %s" 는 whitespace(공백) 전까지의 문자열만 입력받기 때문이다.

그래서 컴퓨터는 문자열의 끝이라고 인식하고 Hello뒤에 '\0' , Null을 붙혀서 문자열을 완성시킨다.

 

그러면 어떻게 모든 문자열을 받을 수 있을까?

 

방법은 여러가지가 있는데 그 중에 fgets를 소개해보겠다.

 

우선 사용방법이다.

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
 
int main(void)
{
    char a[50];
 
    fgets(a, sizeof(a), stdin);
 
    printf("%s", a);
 
    return 0;
}
cs

이런식으로 사용하면 된다.

 

함수의 원형이다.  char* fgets(char* str, int num, FILE* pFile);

str에는 배열을 넣어주고, num에는 배열의 size를 넣어주고, pFile에는 사용자 입력을 받겠다고 stdin을 입력해주면 된다.

 

fgets 함수는 어떻게 동작하냐면,

문자열 끝에있는 "\n" 띄어쓰기를 기준으로하거나 두번째 매개변수로 집어 넣은 num-1 개의 문자열을 기준으로 으로 문자열을 판단해서 가지고 옴. 즉. num-1 보다 작은데 \n이 나오면 해당 문자열까지만 읽음 num-1 까지 읽었을때 \n이 없더라도 num-1 까지만 읽음. 따라서 내가 입력받고 싶은 데이터보다 초과해서 들어오게 되도, 방어가 된다는 소리이다.

댓글