#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
unsigned int i=0;
scanf("%d",&i);
while(i>=0)
{
i=i-1200;
printf("%d\n",i);
}
return 0;
}
이 코드하고
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
unsigned int i=0;
scanf("%d",&i);
while(i>=1200)
{
i=i-1200;
printf("%d\n",i);
}
return 0;
}
이코드하고 실행하였을때 위에 코드는 무한반복되는데 아래코드는 정상적으로 작동되는 원리를 모르겠습니다. 위에 코드가 while조건문이 0이상인데도 마이너스로 계속 반복되는것과 i>=0과 i>=1200이 무슨 차이가 있는건지 이해가 안됩니다
Unit 7.1의 예제에 쓰인 주석을 살펴보세요.
unsigned int는 출력할 때 %u를 써야 합니다.
unsigned int를 출력할 때 %d를 쓰면 signed int로 해석해서 출력하니까 화면에 음수가 출력되는 것으로 보입니다. 실제로는 음수가 아닙니다.
unsigned int는 음수를 저장할 수 없습니다. unsigned int인데 음수가 출력되는 것은 printf에 %d를 썼기 때문입니다.
unsigned int를 썼다면 scanf에도 %d가 아니라 %u를 써야 합니다.
unsigned int는 0~UINT_MAX까지의 범위입니다. 따라서 i >= 0은 항상 참(true)입니다. 따라서 무한 반복이 됩니다.
i >= 1200은 i가 언젠가는 1200 미만일 때가 있으니 루프가 종료될 수 있습니다.
Unit 7부터 천천히 반복해보세요.