예제 : 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 까지만 읽음. 따라서 내가 입력받고 싶은 데이터보다 초과해서 들어오게 되도, 방어가 된다는 소리이다.
'프로그래밍 > C, C++' 카테고리의 다른 글
[C언어] %lf, %lld를 사용해서 큰 숫자를 입력, 출력하는 경우 (0) | 2021.04.01 |
---|---|
[C언어] 실수(소수)를 정수부분, 소수점 부분으로 쪼개서 정수형 2개로 받아보자 (0) | 2021.04.01 |
[C언어] 날짜, 연도 형식으로 입력받고 출력하기 (0) | 2021.04.01 |
[C언어] 소수점 N자리 이하에서 반올림에서 출력하기 (0) | 2021.04.01 |
[C언어] 유니코드 특수문자 출력하기 (0) | 2021.04.01 |
댓글