작성
·
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 변수의 영역과 지역 변수