#3.1 제어와 흐름++

사실 제어문을 아무렇지 않게 시작했지만

우리가 알아야 할것들이 많이 있다.

제어문 시작부분에 참과 거짓을 판별 할 수 있다고 했는데

C언어가 말하는 참과 거짓은 우리가 알고 있는것과 조금 다르다.

참과 거짓이 다르다는게 조금 이해가 안 될 수도 있지만

앞으로도 자주 쓰이기 때문에 잘 알아두는 것이 좋다.

C언어에서의 거짓은 0이다.

0이 거짓이라는 것이 이해가 잘 되는가...?

그럼 1이 참이라는 것인가?

맞다...

0은 거짓이고 다른 모든것은 참이다.

1도 참이고 75도 참이고 'K'도 참이다.

(변수부분에 보면 캐릭터는 상수로 존재한다.)

0만 거짓인것이다.

('0'은 거짓이 아니다 '0'은 48이다.)

물론 '\0', 즉 NULL문자는 0이고 거짓이다.

아래 프로그램을 실행시켜보기 전에

무한 루프에 빠진 프로그램을 끝내기 위해선

프로그램을 종료하는 버튼인 Ctrl + c를 알아두고 가자

 

(이제 좀 알만하니 include문이나 main은 빼도 눈치껏 알아보자..)

 

int j = 0;
while(1) // 0이 아닌 모든것은 참이기 때문에 무한 루프에 빠진다)
{
   printf("%d",j);
   j++;
}

 

이게 뭐가 중요한가 하겠지만 실제로 C언어 프로그래밍에서

변수만 제어문의 인자로 넣어줘도 변수가 변하면서 제어문을 빠져나오기도 하고

입력을 받을때 아무것도 입력 받지 않으면 NULL문자가 들어오기 때문에

제어문에서 거짓으로 판별할 수도 있다.

예를 들면

 

for(i = 100; i; i--)
{
   printf("%d", i);
}

 

이렇게 사용 될 수 있다는 것이다.

0(NULL 포함)이 거짓이라는것만 잘 알고 넘어가자

솔직히 위와같은 코딩은 안좋은 코딩이다...

위에는 확실히 그럴일이 없겠지만 혹시 음수에서 무한하게 돌고 있을 수 있기 때문에

음수부분을 아래처럼 처리해 주는게 좋다

 

for(i = 100; i <0 ; i--)
{
   printf("%d", i);
}

 

if()-else문에서 조금은 헷갈리는 문장이 생길 수 있다.

 

if()

if()

else

printf("어디냐");

 

 

if()

if()

else

printf("어디냐");

 

위 코드를 이해할 수 있는가...?

그냥 내용은 빼고 예를 들기위한 코드이다

여기있는 else문은 if()문에대한 else문일까...?

어떤 if()문이 거짓일때 "어디냐"가 출력될까...?

잠시 여기까지만 읽고 저걸 실행해 보자...

C언어를 계속 접해도 가끔 물어보면 저 문제가 헷갈리기도 한다

그러니까 직접 해보길 바란다

답은 아래있는 if()문이다

else는 바로 앞에 있는 if()문에 붙게 되어있다

이것에 대한것은 아마도 3학년쯤

언어론 시간에 배우게 될 것이다

 

그리고 switch()문에서 잠시 나온

break라는 문을 생각해보자...

갑자기 말도 없이 나타난 break...

단어 자체 때문에 끝낸다거나 빠져나간다는 느낌이 들었다

어디서 얼마나 빠져나가는 것인지...

처음에 접하는 사람은 다 헷갈리게 마련이다.

break문은 좀 특수한 문장으로 제어와 흐름을 중단하는 역할을 한다.

앞에서 본 switch()문안에서나 반복문(for(), while(), do-while())문에서

뒷부분은 무시한채 반복을 종료하게 한다.

 

int j = 0;
while(1) // 0이 아닌 모든것은 참이기 때문에 무한 루프에 빠진다)
{
   printf("%d",j);
   j++;
   if(j <= 10)
      break;
}

 

그리고 비슷한 놈이 하나 더 있다

continue라는 놈도 있다.

끝내는놈 말고 계속 하라는 놈이 또 있다~ ㅎㅎ

얘도 특수한 경우인데 반복문에서만 사용된다

반복문에서 반복되는 문장들 중에 continue의 뒷 문장들을 다 지나치고

반복문의 머리로 올라가서 계속 반복할 것인지를 확인하게 된다.

이해가 잘 안될 수도 으니 밑에 예제를 보자

 

int j = 0;
while(1) // 0이 아닌 모든것은 참이기 때문에 무한 루프에 빠진다)
{
   printf("%d",j);
   j++;
   if(j <= 10)
      break;
   if(j % 2 != 0)
      continue;
   printf("짝수");
}

 

j를 2로 나눈것이 0이 아니면 "짝수"를 출력하지 않고

다시 while()문의 맨위 부터 다시 실행한다

 

반복문을 계속 하고 있는데 그냥 넘어간 do-while()문에 대해 알아보자

반복문을 실행하는데 있어서 for()문이나 while()문이나 둘다 똑같이

조건이 만족하면 반복될 내용을 한번도 실행하지 못하게 된다.

적어도 한번은 실행되야 한다면 do-while()문을 사용하는 것이다.

예를 들면 프로그램이 실행되고나서

메뉴를 출력하는 일이 그렇다.

프로그램이 실행되고나서 메뉴를 한번 출력해줘야

무언가 선택 할 수 있지 않겠는가...?

그리고 계산을 끝내고 다시 돌아온 다음에

메뉴를 출력해줘야 하기때문에 이럴땐 do-while()문을 사용한다.

 

int input = 0;
do
{
   printf("1.계산기");

   printf("0.종료");
   scanf("%d", &input);
}while(input);

 

do-while()은 while()문의 반복내용을 실행하고 조건을 검사한다고 생각하면 된다.

영어도 쉽지 않은가 while()문이지만 일단 do하고 while()문을 하니까~ ㅎ

 

위에 나온 모든일을 단번에 할 수 있는 마법의 명령어가 하나 더 있다.

goto문은 내가 가고 싶은 어디든 이름만 정해 두면 한방에 날라갈 수 있다.

하지만!!!!!!!!!!!!!!!!!!!!!!!!!!

goto문은 사용해서는 안된다!!!

구조적인 언어에서 제어의 흐름을 마음대로 바꾸기 때문에 우린 위에서 쓴

제어와 반복문을 가지고 프로그램을 만들도록 하자...

그래도 goto문을 배워야 할것 같다면 책을 찾아보아라...

대부분의 책(99.99%)에도 사용하지 말라고 할것이고 쓰는 사람도 없다

배워도 쓸일이 전혀 없다는 것이다.

이 글은 스프링노트에서 작성되었습니다.

by 그아이 | 2009/03/22 23:03 | Programming | 트랙백 | 덧글(0)

트랙백 주소 : http://theiz.egloos.com/tb/4257856
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]

:         :

:

비공개 덧글

◀ 이전 페이지          다음 페이지 ▶