오랜만에 개발블로그 작성. 그간 여러 일들로 인해 개발 공부에 손을 놓고 있다가 드디어 다시 시작한다.

가볍게 백준 문제를 풀어보았다. 근데 겨우 브론즈에 낑낑대면서 풀었다.

 

문제는 간단하다. N만큼 문자열 입력받고 그거에 숫자만 붙여서 출력하기.

 

<오답>

처음에 실수한 건 그거다. getchar를 추가하지 않았고, 문자열 입력받는 걸 scanf로 해결했다.

근데 scanf로 2차원 배열에 입력하는 걸 못하겠는거다. 왜 안되지? 공백 생각해서 %[^\n]s까지 사용했는데.

그래서 챗지피티한테 2차원 배열 입력 어떻게 하냐고 물어봤더니 fgets를 쓰란다. 아하!

 

결론 : 2차원 배열에 문자열 입력하려면 fgets를 쓴다.

 

<정답>

#include <stdio.h>
#include <string.h>
#define CRT_SECURE_NO_WARNINGS

int main() {
	int n;
	char arr[100000][51] = {};
	scanf("%d", &n);
	getchar(); // 이거 안 넣으면 첫번째 문장은 공백이 됨.
	for (int i = 0; i < n; i++) {
		fgets(arr[i], 52, stdin); // 이걸 52로 바꾸니까 해결됨. 으아!!!

		//맨 뒤 \n을 없애주는 작업.
		int length = strlen(arr[i]) - 1;
		printf("길이:%d\n", length);
		if (arr[i][length] == '\n') {
			arr[i][length] = '\0';
		}
	}
	for (int i = 0; i < n; i++) {
		printf("%d. %s\n", i+1, arr[i]);
	}
	return 0;
}

 

 

맞는 거 같은데 계속 틀려서, 질문게시판의 반례를 입력해보니 원인을 찾았다. 최대 길이인 50자리 문자열을 입력하면 마지막 글자가 자꾸 2번으로 넘어갔다.

fgets안의 입력받는 문자열 크기를 50에서 51로 바꿔줬는데도 안됨. 그래서 52로 바꿨더니 됨.

'\0'도 포함해서 그런건가?