미누에요
[백준 4470번] 줄번호 - C99 본문
728x90
반응형
SMALL
문자열에 숫자를 붙여서 출력하는 문제이다.
먼저 문자열을 입력받고, 그 문자열의 앞에 숫자를 추가하는 방법과
따로 출력하여 붙어있는 것처럼 보이는 방법 두 가지가 생각났는데, 일단 후자의 방법을 선택하여 문제를 풀었다.
C언어에서는 문자열을 입력받기 위해 배열을 사용해야 한다.
그리고 나는 여러 개의 문자열을 입력받기 위해 이중 배열을 사용하여 한 변수에 입력값을 모두 저장하고자 하였다.
#include <stdio.h>
#include<string.h>
int main(void) {
int n = 0; //처음에 입력받을 변수
char a[99][52]; //문자열을 입력받을 배열
scanf("%d", &n);
getchar();
for (int i = 0; i < n; i++) {
fgets(a[i], sizeof(a[i]), stdin);
}
for (int i = 0; i < n; i++) {
printf("%d. %s", i + 1, a[i]);
}
return 0;
}
이 문제에서는 띄어쓰기가 포함된 문장을 입력받아야 하기에, scanf가 아닌 gets함수를 사용해야 하지만, 보안상의 이유로 fgets함수를 사용하라고 해서 fgets 함수를 사용하였다.
그리고 이 문제에서 헤메던 부분은 getchar 함수인데, getchar 함수를 사용하지 않고 이 코드를 실행할 경우 출력되는 문자열들이 하나씩 빠지는 현상이 발생하였다.
이유를 찾아보니 scanf 함수가 데이터를 입력받을 때 값을 입력하고 엔터를 누른다.
변수에는 값이 들어가지만 버퍼 상에는 '엔터' 값이 남아있다.
그래서 버퍼 상에서 이 엔터값을 비워주지 않는다면 다음 값을 입력할 때 오류가 발생하는 것이다.
따라서 fflush(stdin)을 사용하거나 getchar() 함수를 사용하여 값을 비워줘야 한다.
그리고 배열의 크기를 51으로 지정해도 문제가 해결되지 않았다.
52로 설정하니 문제가 해결되었다.
내 생각에 엔터값을 함께 인식하여 51에서도 데이터가 오류나는 현상인 거 같다.
728x90
반응형
LIST
'알고리즘' 카테고리의 다른 글
[백준25704번] 출석 이벤트 - C99 (1) | 2023.06.06 |
---|---|
[백준 5524번] 입실 관리 - C99 (0) | 2023.06.06 |
별 그리기에서 아차 싶었던 나의 복습 (0) | 2023.06.06 |
[백준 2439번] 별 찍기 - 2 - C99 (0) | 2023.06.06 |
[백준 10757번] 큰 수 A+B - C99 (1) | 2023.06.06 |