C 자주 범할 수 있는 실수 #1

최대 1 분 소요

질문

상위 10%까지 A, 30%까지는 B … 이런식으로 나오게끔 작성하고 싶은데, 의도한 대로 결과가 나오지 않습니다.

문제 코드

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

int main(void)
{
    int ranking = 0;
    int whole = 0;
    int score = 0;

    printf("등수?");
    scanf_s("%d", &ranking);

    printf("전체 인원수? ");
    scanf_s("%d", &whole);

    score = ranking / whole * 100;

    if(score <= 10)
        printf("A\n");
    else if(10 <= score <= 30)
        printf("B\n");
    else if(30 <= score <= 60)
        printf("C\n");
    else if(60 <= score <= 90)
        printf("D\n");
    else
        printf("F\n");

    return 0;
}

답변

Python의 경우와는 달리 C에서는 다음의 조건을 이어지는 문법으로 만족시킬 수 없습니다.

조건

score는 10 이상이고 30 이하이다.

10 <= score <= 30

그러므로 C에서 위의 조건을 만족시키기 위해서는 다음과 같은 조건식을 구성해야 합니다.

10 <= score && score <= 30

또한, 이 경우에 관계 연산자와 논리 연산자의 혼용없이 조건식을 간결하게 구성할 수도 있습니다.

다음은 이러한 Concept을 반영한 코드입니다.

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

int main(void)
{
    int ranking = 0;
    int whole = 0;
    int score = 0;

    printf("등수?");
    scanf_s("%d", &ranking);

    printf("전체 인원수? ");
    scanf_s("%d", &whole);

    score = ranking / whole * 100;

    if(score <= 10)
        printf("A\n");
    else if(score <= 30)
        printf("B\n");
    else if(score <= 60)
        printf("C\n");
    else if(score <= 90)
        printf("D\n");
    else
        printf("F\n");

    return 0;
}

댓글남기기