본문 바로가기

Programming languages/C

4. C언어(조건문)

728x90
반응형

if,  else if,  else 문)

if 이하는 조건식이 참을 만족하면 문장을 실행한다. else는 조건식이 거짓임을 만족하면 문장을 실행한다.

#include <stdio.h>

int main()
{
    int x;
    printf("x값을 입력하세요: ");
    scanf("%d",&x);

    if(x>5)
    {
        printf("입력받은 x: %d",x);
        printf("x는 5보다 큽니다.");
    }
    
    else
    {
        printf("입력받은 x: %d",x);
        printf("x는 5보다 작거나 같습니다.");
    }

    printf("프로그램을 종료합니다.");

    return 0;
}

조건문은 중괄호를 이용해서 block으로 묶어줄 수 도 있다.

 

#include <stdio.h>

int main()
{
    int x;
    printf("점수를 입력하세요: ");
    scanf("%d",&x);

    if(x>=70){
        if(x >= 90)
            printf("학점은 A입니다.");
        else if(x >=80 && x < 90)
            printf("학점은 B입니다.");
        else
            printf("학점은 C입니다.");
    }

    else
        printf("힉점이 C미만입니다. 재수강 대상입니다.");
    
    return 0;
}

점수 구간에 따라서 학점을 출력해 주는 프로그램이다. if, else if, else를 이해하는데 도움이 된다. 중괄호로 묶인 경우 다른 if 절과 else를 매치시킬 수 있다. 또한 위처럼 중첩 if문도 사용 가능하다. 

 

switch 문)

#include <stdio.h>

int main()
{
    int x;
    int y;
    char t;

    printf("첫번째 정수를 입력하세요: ");
    scanf("%d",&x);
    printf("두번째 정수를 입력하세요: ");
    scanf("%d",&y);
    printf("원하는 연산을 입력하세요: ");
    scanf(" %c",&t);

    switch(t){
        case '+':
            printf("%d",x+y);
            break;

        case '-':
            printf("%d",x-y);
            break;

        case '/':
        case '%':
            printf("몫:%d, 나머지:%d",x/y,x%y);
            break;

        case '*':
            printf("%d",x*y);
            break;

        default:
            printf("올바른 사칙연산 기호를 입력하세요.");
            break;
    }

    return 0;
}

위 코드를 작성하다 오류를 하나 발견했다. 정수형 입력을 받은 다음에 문자형 입력을 받으려고 하면 문자형 데이터를 입력 받기 전에 scanf 함수가 종료되어 버리는 것이다. 인터넷에서 찾아보니 이전 scanf에서 데이터를 입력하고 엔터를 치는 것이 다음 줄의 scanf에서 인식되어 그런 것이라고 한다. 이를 방지하기 위해서 "% c" -> " % c"로 앞에 스페이스바를 하나 넣어 주면 된다고 한다.

자세한 설명은 다른 블로그의 글을 첨부한다. https://swpfun.tistory.com/586

 

c언어 scanf()함수의 입력오류 ( 입력 버퍼 비우기)

지금까지 선택문 if문, if ~ else문, if ~ else if ~ else문 과 switch ~ csae문을 공부했고 반복문 for문, while문, do ~ while문 그리고 함수의 선언과 형태에 대해서 공부했습니다. 이제 여기까지 이해가 되셨..

swpfun.tistory.com

위 코드를 다시 보면 위 코드는 정수 두개를 입력받은 후 사칙연산 기호에 따라서 case를 나누어 놓은 코드이다.

switch문 안에 들어가는 값은 변수, 변수가 포함된 수식, 실수, 문자열은 사용이 불가능하다. 문자형과 정수형은 가능하다.

break 문을 각 case마다 넣어줘서 실행 후 종료 될 수 있도록 한다. 그러나 위의 % 연산처럼 / 연산과 함께 결과를 출력할 수 있도록 의도적인 생략을 하는 경우도 존재한다. 

default는 모든 case에 해당하지 않을때 출력되는 값을 의미한다.

모든 break를 없앤 경우에는 다음과 같다. 해당하는 case절 이하 코드를 전부 실행한다.

#include <stdio.h>

int main()
{
    int x;
    int y;
    char t;

    printf("첫번째 정수를 입력하세요: ");
    scanf("%d",&x);
    printf("두번째 정수를 입력하세요: ");
    scanf("%d",&y);
    printf("원하는 연산을 입력하세요: ");
    scanf(" %c",&t);

    switch(t){
        case '+':
            printf("%d\n",x+y);

        case '-':
            printf("%d\n",x-y);

        case '/':
            printf("몫:%d, 나머지:%d\n",x/y,x%y);

        case '*':
            printf("%d\n",x*y);

        default:
            printf("올바른 사칙연산 기호를 입력하세요.");

    }

    return 0;
}

 

goto)

Goto문 이라는 조건 없이 특정 지점으로 점프하는 함수도 존재하지만 이를 남용하면 스파게티 코드가 될 가능성이 매우 높다. 따라서 간단하게 소개만 하고 예제를 첨부한다. 최대한 사용을 지양하는 것이 좋다.

728x90
반응형

'Programming languages > C' 카테고리의 다른 글

6. C언어(함수 & 변수)  (0) 2022.08.14
5. C언어(반복문)  (0) 2022.08.11
3. C언어(수식과 연산자)  (0) 2022.08.09
2. C언어(변수와 자료형)  (0) 2022.08.09
1. C언어(기본,함수,자료형)  (0) 2022.08.09