ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • C언어 switch
    Visual Studio/C 기초 2012. 9. 10. 00:23

    if문 같은 제어문은 2개의 값인 참, 또는 거짓으로만 평가되었지만 switch문은 여러 조건에 근거하여 프로그램의 흐름을 제어합니다. C언어에서 제공되는 가장 융통성있는 프로그램 제어문은 switch문이라 할 수 있겠습니다.  if문으로 여러 조건으로 제어하려면 if문을 중첩시켜야 하죠. 번거롭기 때문에 switch문이 있는겁니다. 사용 예를 바로 들어보겠습니다.

     

    #include <stdio.h>

    main(){
     int rep;
     puts("1과 5사이의 숫자 중 하나를 입력하세요 : ");
     scanf("%d", &rep);

     switch(rep)
     {
     case 0:
      break;
     case 1:
      {
       puts("1을 입력하셨군요.\n");
       break;
      }
     case 2:
      {
       puts("2을 입력하셨군요.\n");
       break;
      }
     case 3:
      {
       puts("3을 입력하셨군요.\n");
       break;
      }
     case 4:
      {
       puts("4을 입력하셨군요.\n");
       break;
      }
     case 5:
      {
       puts("5을 입력하셨군요.\n");
       break;
      }
     }

    실행하면 정상적으로 동작할 겁니다.

     

    switch문은 메뉴를 처리하는 경우에 가장 많이 사용됩니다. 이번엔 메뉴체계를 구성하기 위한 switch 문을 만들어보겠습니다.

     

    #include <stdio.h>
    #include <stdlib.h>

    #define DELAY 1500000000
    int menu(void);
    void delay(void);
    main(){
     while(1) //무한 반복문입니다.
     {
      switch(menu())
      {
      case 1:
       {
        puts("선택 1을 실행중입니다");
        delay();
        break;
       }
      case 2:
       {
        puts("선택 2를 실행중입니다");
        delay();
        break;
       }
      case 3:
       {
        puts("선택 3을 실행중입니다");
        delay();
        break;
       }
      case 4:
       {
        puts("선택 4를 실행중입니다");
        delay();
        break;
       }
      case 5:
       {
        puts("프로그램을 종료중입니다...\n");
        delay();
        exit(0);
       }
      default :
       {
        puts("유효하지 않은 선택입니다 다시 시도해주십시오");
        delay();
       }
      }
     }
    }
    int menu(void)
    {
     int rep;
     puts("임무 A를 수행하기 위해 1을 입력하여 주십시오.\n");
     puts("임무 B를 수행하기 위해 2를 입력하여 주십시오.\n");
     puts("임무 C를 수행하기 위해 3을 입력하여 주십시오.\n");
     puts("임무 D를 수행하기 위해 4를 입력하여 주십시오.\n");
     puts("5를 입력하여 프로그램을 종료\n");
     scanf("%d", &rep);
     return rep;
    }
    void delay(void)
    {
     long x;
     for(x = 0; x < DELAY; x++);

    여기서 exit() 문이 나오는데, break를 쓰면 switch문에서만 벗어나지만, exit()를 사용하면 프로그램 자체를 종료합니다.

    일단 이 프로그램의 알고리즘을 설명해 드리겠습니다.

    menu를 먼저 실행하고, 입력값을 rep에 받은 후에 받은 값과 일치하는 조건(case)에 맞춰 switch문이 발동됩니다. 이 때, delay()값에 의해 언제 다시 반복될 지에 대해 정해집니다.

    case 안의 puts 내용을 실행한 후, delay에서 DELAY값 만큼 인수 x가 반복됩니다. 반복문이 끝나면 delay()는 끝나고 break문이 실행되면서 다시 menu()로 돌아오는 것이죠.

    5를 입력할 경우, delay()가 실행되고, exit()문에 의해 종료됩니다.

     

    만약, 조건(case) 에 아무 것도 없고 break문 조차 없으면 조건의 차례대로 쭉쭉 실행되어 나갑니다.

    깍두기 프로그램 내에서 운영체제 명령을 실행하는 방법

    C언어 표준 라이브러리는 운영체제의 명령을 실행하게 해주는 system()함수를 제공합니다. 이 함수는 프로그램을 종료하지 않은 상태에서 디렉터리 목록을 살펴보거나 디스크를 초기화하게 해주므로 때에 따라 유용할 수 있습니다. 이 함수를 사용하기 위해선 stdlib.h 를 포함해줘야 합니다~

    system("dir");

    또는

    char *command = "dir" ;

    system(command);

    운영체제의 명령을 실행하고 나면 프로그램의 제어는 system()함수 바로 다음 문장으로 전달됩니다. system()에서 사용한 명령이 운영체제에서 유효하지 않은 명령이라면 프로그램이 다시 실행되기 전에 Bad command or file name이라는 에러메시지가 출력됩니다. 예제를 보겠습니다.

     

    #include <stdio.h>
    #include <stdlib.h>

    main()
    {
     char input[40];
     while(1)     //여러 개의 명령어를 입력받기 위해 계속 반복시킵니다. 그냥 아무 것도 입력 안하고 엔터를 누를 경우, 프로그램은 종료됩니다.
     {
      puts("정의된 시스템 명령어를 입력하세요, 빈칸이면 종료됩니다. :");
      gets(input);

      if(input[0] == '\0') //그냥 엔터만 눌렀을 경우 첫번째 값은 NULL값이 들어오겠죠? NULL 값일경우 프로그램을 종료 시키게 하는 제어문입니다.
       exit(0);
      system(input);
     }

     

    여기서 dir을 입력하면 현재 경로에서 .c의 확장자를 가지는 모든 파일이 나열됩니다. 이건 도스명령어입니다. 한 번 입력해보세요 ^^

    'Visual Studio > C 기초' 카테고리의 다른 글

    C언어 함수 기초  (2) 2012.09.14
    C언어 고급포인터  (0) 2012.09.13
    C언어 반복문제어 (break, continue, goto)  (0) 2012.09.08
    C언어 변수의 범위  (0) 2012.09.07
    C언어 구조체 멤버로 사용되는 포인터  (0) 2012.09.07

    댓글

Designed by Tistory.