강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

chobocorder님의 프로필 이미지
chobocorder

작성한 질문수

홍정모의 따라하며 배우는 C언어

6.15 중첩된 루프들

1:00 알파벳 예제 직접 풀어봤는데 의문점이 있습니다.

작성

·

212

0

int main()

{

int i = 'A';

int m = 1;

int n = 0;

 

for (; m <= 5 ; m++)

{

for (; n <= 10 ; n++)

{

printf("%c ", i + n);

}

printf("\n");

}

 

return 0;

}

 

답안을 보기 전에 임의로 만들어 보았습니다.

좀 더럽게 만들긴 했는데 A ~ K까지 첫 줄은 잘 출력이 되는데 2 ~ 5열까지는 출력이 되지가 않았습니다.

두번째 루프는 작동을 하는데 첫번째 루프가 작동하질 않습니다.  

 

첫번째 루프를 답안과 비교를 해봐도 제가 만든 첫번째 루프에서 어디가 문제인지를 모르겠습니다. 어디에서 문제가 생긴걸까요?

퀴즈

scanf() 함수의 반환값은 주로 무엇을 의미할까요?

읽어들인 문자 수

오류 코드

성공적으로 읽어들인 변수 수

입력된 값의 합계

답변 1

0

int n 을 바깥에서 선언하신게 원인입니다.

굳이 바깥에서 선언하신 이유가 있으실까요?

이건 변수의 수명과 범위에 대한 이해가 있으셔야 이해될 수 있는 부분인데

       for (; m <= 5; m++)

	{

		for (int n = 0; n <= 10; n++)

		{

			printf("%c ", i + n);

		}

		printf("\n");

	}

이렇게 int n 을 안쪽 for문 안에서 선언한거라고 가정해보면 이 n 의 수명은 바깥 for문이 한번 돌았을 때동안만 지속이 됩니다.

변수의 수명은 { } 자신이 속해있는 중괄호라고 생각하면 되는데 int n 은 바깥 for 문 중괄호 안에 해당되기 때문입니다. 

따라서 바깥  for문의 반복 1번이 끝나면 n 은 사라지며 바깥 for문의 다음 반복 (즉, m++ 된 후) 때 새롭게 또 int n 이 만들어지는 식인 것입니다. (그래서 n 이 다시 0 에서 시작) 

int n = 0;

for (; m <= 5; m++)

	{

		for (; n <= 10; n++)

		{

			printf("%c ", i + n);

		}

		printf("\n");

	}

질문자님께선 이렇게 n 을 바깥에다가 선언해주셨기 떄문에 n 은 수명이 두 이중 for문이 다 돌때까지도 살아있게 됩니다. 그렇기 떄문에 바깥 for문의 첫번째 반복 (즉, 1열 출력) 때 이미 n 이 10에 도달했기 때문에 두번째~다섯번째 반복때는 안쪽 for문의 반복조건인 n <= 10 에 해당되지 않기에 안쪽 for문이 돌지 않았던 것입니다. 첫번째 예시 코드처럼 하셨다면 다음 반복때 새롭게 n 이 선언될테니 n이 매 반복마다 0 부터 시작했겠죠.

 

 

chobocorder님의 프로필 이미지
chobocorder
질문자

감사합니다

chobocorder님의 프로필 이미지
chobocorder

작성한 질문수

질문하기