블로그 이미지
하루, 글. 그림. 영상매체. 표현을 도와주는 기기들. 도전 중. 동화다아아
    동화다아아

    카테고리

    분류 전체보기 (176)
    잡담 (1)
    IT 기기-리뷰&뉴스 (7)
    리뷰 - 도서 (1)
    리뷰 - 영상 (0)
    리뷰 - 그림/음악 (1)
    내장형 하드웨어 (163)
    Total
    Today
    Yesterday
     for문 (초기식과 증감식의 변형)


    //$를 누를 때 까지 키보드로부터 문자를 읽고 출력하는 프로그램


    #include<stdio.h>

    int main()

    {

            char ch;

            int i;


            printf("Please enter any character: ");

            for(i=0;(ch=getchar())!='$';i++)  // getch 대신 getchar를 사용했다.

            {

                    printf("\nYou typed: %c\n",ch);

                    getchar(); // 예문에 없는 추가한 부분.

                    printf("Please enter any character: ");

            }

            putchar ('\n');


            return 0;

    }


    ⇒ 예제 p3_23에서는 #include<conio.h>를 추가로 호출해서 getchar 대신 getch를 사용하였다. 하지만 <conio.h>는 윈도우에서만 사용가능한 명령으로 linux에서는 쓸 수 없다. 따라서 getch 역시 linux에서는 쓸 수 없다.

    ⇒ getchar → 키보드에서 글자를 하나 읽어온다.(블록된다.) char를 get한다는 뜻.(즉, scanf와는 달리 한 개만 입력 받는다.)

       getch → 비표준이다. <conio.h>는 윈도우에서만 지원한다. 따라서 linux 에서는 쓸 수 없으며 버퍼를 사용하지 않아 입력즉시 동작한다.(표준 C는 버퍼를 사용한다.)

    ※ getchar를 사용할 때 fflush(stdin)을 쓰면 getch와 같은 기능을 할 수도 있다.(역시 윈도우에서 가능, linux는 차이가 있다.)

    ⇒ getchar와 getch의 차이는 버퍼를 사용하느냐와 아니냐의 차이가 있다. 즉, 입력을 해도 getchar는 enter를 기다리고 버퍼를 사용하지 않는 getch는 바로 동작한다.

    ⇒ 위의 예문을 linux 환경에서 작성하고 컴파일 했기에 getch를 사용할 수 없으므로 getchar를 사용하였다.

    ⇒ 위에서 조건식의 getchar를 호출하면 키보드에서 한글자를 불러와 ch에 아스키 코드가 저장된다.(‘ ’는 정수를 뜻한다.) 입력받은 아스키 코드와 ‘$’의 아스키 코드를 비교해 값이 다르면 참이되어 for문의 내용을 실행하고 아니면 반복문을 빠져 나간다.

     

    ⇒ 반복문 안에 getchar()를 추가하지 않는다면 반복문 안의 명령이 for문을 거쳐 한번 더 실행된다. 왜냐면 enter가 버퍼에 남아있어 입력이 한 번 더 된 것과 같기 때문이다. %c 부분을 %d로 바꾸어 주면 아스키 코드 값이 출력되는데 반복문 사이 getchar를 넣지 않는다면 enter의 아스키 코드 값 10이 출력되는 것을 볼 수 있다.


    - for 문 예제를 while 문으로 바꾸어 보는 실습.

    for문 사용

    while문 사용

    #include<stdio.h>

    int main()

    {

            int i;

            for(i=1;i<=5;)

            {

                    printf("%d\t",i++);

            }

            putchar('\n');

     

            return 0;

    }

    #include<stdio.h>

    int main()

    {

            int i;

            i=1;

            while(i<=5)

            {

                    printf("%d\t",i);

                    ++i;

            }

            putchar('\n');

     

            return 0;

    }

    ⇒ for 문은 while 문으로 while 문은 for 문으로 바꾸어서 사용할 수 있다.

    ⇒ for 문에서 초기식과 증감식을 끄집어내어 증감식을 while 문내에 초기식을 while 문 앞에 선언하게 되면 위와 같이 같은 동작을 하는 소스가 된다.


    #include<stdio.h>

    int main()

    {

            int iNum=1;

            for(;;) // for문 안을 무한히 반복한다.

            {

                    printf("%d\n",iNum);

                    ++iNum;

                    if(5<=iNum) // iNum이 5보다 작거나 같으면

                    {

                            break; // for문을 빠져나간다.

                    }

            }

            return 0;

    }

    ⇒ for(;;)과 while(1)은 반복문을 무한히 반복하는 것을 뜻한다.

    ⇒ while문의 괄호안의 숫자는 0을 제외하면 참이다. 즉, 0을 제외한 어떠한 값을 넣더라도 무한반복문이 된다.

    ⇒ 무한 반복문 내에 위와 같이 break;를 사용하게 되면 반복에서 빠져나갈 수 있다.

    Posted by 동화다아아
    , |

    최근에 달린 댓글

    최근에 받은 트랙백

    글 보관함