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

오행준님의 프로필 이미지
오행준

작성한 질문수

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

6.15 중첩된 루프들

scanf를 사용해서 예제 1번을 풀려하는데..ㅠㅠ

작성

·

151

0

#include<stdio.h>

int main() 

{

char alpa = 'A';

char beta = 'K';

int recycle = 0;

int num = 0;

printf("How much recycling? : \n");

scanf("%d", &recycle);

printf("Recycle : %d\n", recycle);

for (num; num <=recycle; num++) {

for (alpa; alpa <= beta; alpa++) {

printf("%c", alpa);

} char alpa = 'A';

}

}

--

첫번째 for문에서 scanf로 받은 값 만큼 반복시키려고 했는데.. 왜 안되는지 아무리 생각해도 모르겠네요.ㅠㅠ... 넘 어렵네요..

답변 1

2

위와 같이 수정해주시면 될거에요! 두 번째 for문이 끝난 후, 질문자님이 작성하셨던 char alpa = 'A' ; 에서 char를 떼고 alpha = 'A' ; 로 수정해주시면 됩니다. 그리고 printf("\n") 로 한 줄 띄어주시면 더 좋구요!

질문자님께서 작성하신 char alpa = 'A' ; 문장은 변수 선언식입니다. 따라서 alpa 라는 이름을 가진 char 타입의 변수를 완전히 새롭게 만들어준 것이고 (질문자님이 코드 첫줄에 생성하신 그 alpa 와는 이름만 같을 뿐 전혀 다른 새로운 변수입니다.)

alpha = 'A' ; 문장은 단순히 기존에 질문자님께서 코드의 가장 첫 줄에 만들어두셨던 그 alpha 라는 변수를 사용하는 것입니다. 그냥 이때 만들어 둔 alpa 변수 값을 'A' 로 수정해주는 문장입니다. 

다시 정리해드리자면

 질문자님께서 작성하신 char alpa = 'A' ; 문장은 질문자님께서 코드 첫줄에 생성해주셨던 alpa 변수와는 완전히 다르고 이름만 같을 뿐인 동명이인 alpa 변수를 새롭게 만들어주는 문장입니다. 두번째 for문을 도는동안 계속 A -> B -> C-> ... 이렇게 값이 갱신되어 왔던 그 alpa와는 이름만 같을 뿐 쌩판 남남인 다른 변수입니다!  따라서 기존에 두번째 for문에서 갱신되어왔던 그 alpa 변수는 다시 'A'로 리셋 되지 못한 체로 첫번재 for문을 다시 반복하러 갔기 때문에 올바른 결과가 나오지 못했던 것입니다.

5를 입력했다면 A B C D E  까지 출력하고 다시 alpa 값을 A 로 만들어서 또 다음 줄에서 A B C D E 반복을 시작 해야 하는데 질문자님께서는 alpa 라는 이름이 같을 뿐인 완전히 새로운 변수를 만들고 그 변수를 A 로 만드셨기 때문에 두번째 for문에서 사용된 기존 alpa 는 그냥 여전히 'E'인 상태로 첫번째 반복문으로 돌아갔기 때문에 정확한 결과가 나오지 못한 것입니다.

질문자님께서 동일한 이름의 변수를 또 만들 수 있었던 이유는 변수의 범위(scope) 가 다르기 때문입니다. 질문자님께서 새롭게 만드신 char alpa = 'A' ; 이 변수는 첫번째 for문 안에서 선언된 변수이므로 첫번째 for문의 { } 중괄호 범위에서만 수명을 가지는 변수이기 때문에 질문자님께서 코드 첫줄에 만드신 그 alpa 와 동일한 이름의 변수를 만들 수 있었던 것입니다. 어차피  for문의 { } 중괄호 범위에서만 살아있다가 곧 없어질 변수니까요.

변수를 선언하면 그 변수가 속한 { } 중괄호가 변수의 수명 범위라고 생각하시면 됩니다!

변수의 scope에 대해서는 6.18 루프 안에서 함수의 반환값 사용하기 에서 교수님께서 설명해주실겁니다! 

그리고 함수 배우실 때  9.4 변수의 영역과 지역 변수 에서도 더 자세히 배우실겁니다. 충분히 헷갈릴 수 있는 부분이고 아직 이 부분에 대해서 배우지 않으셔서 어려우셨던 것 뿐입니다 ㅠㅠ 변수의 scope 에 대해서 추후 강의에서 공부하시면 전혀 어렵지 않으실거에요 !! 화이팅!

9.4 변수의 영역과 지역 변수

 

오행준님의 프로필 이미지
오행준

작성한 질문수

질문하기