Hayden's Archive

[C언어] 배열 관련 코드 본문

Study/ETC

[C언어] 배열 관련 코드

_hayden 2020. 7. 30. 13:31

큰따옴표(")를 출력해야 했는데 아스키코드를 활용하여 출력했다.

이전에는 입력을 받을 때 CS50 라이브러리에 있는 get_int, get_string을 사용했는데 C 표준 라이브러리에 있는 scanf를 사용했다. ( 참고 : https://www.tutorialspoint.com/cprogramming/c_input_output.htm )

C언어에서는 자바나 C++과는 달리 String형이 존재하지 않고, 문자열은 char배열로 존재한다.

또 이미 선언하고 할당한 char배열로 문자열을 사용할 때, 배열을 선언한 즉시 문자열로 초기화하며, 배열을 미리 선언해놓고 문자열을 나중에 할당할 수는 없다. 이 점 때문에 애를 먹었는데 편하게 CS50 라이브러리를 사용할까 하다가 C 표준 라이브러리를 사용해보고 싶어졌고 string.h에 있는 strcat을 사용해서 이전에 선언하고 할당한 char배열에 붙였다. ( 참고 : https://dojang.io/mod/page/view.php?id=359 )

 

#include <stdio.h>
#include <string.h>

const int TOTAL = 9; //학점과 성적의 개수
const char *GRADES[TOTAL] = {"A+", "A", "B+", "B", "C+", "C", "D+", "D", "F"}; //학점
const int SCORES[TOTAL] = {95, 90, 85, 80, 75, 70, 65, 60, 0}; //점수

int main(void)
{
    //초기 안내 문구
    printf("학점 프로그램\n");
    printf("종료를 원하면 %c999%c를 입력\n", 34, 34);
    printf("[학점 테이블]\n");

    //점수 안내
    printf("점수 : ");
    for(int i=0; i<TOTAL; i++)
    {
        printf("%d   ", SCORES[i]);
    }

    //학점 안내
    printf("\n학점 : ");
    for(int i=0; i<TOTAL; i++){
        printf("%s   ", GRADES[i]);
    }
    while(1)
    {
        int score; //사용자로부터 입력받을 점수
        char grade[2]=""; //입력 점수로부터 도출할 학점
        printf("\n성적을 입력하세요 (0~100) : ");
        scanf("%d", &score);
        if(score==999)
        {
            printf("학점 프로그램을 종료합니다.\n");
            break;
        }
        else if(score>100 || score<0)
        {
            printf("** %d 성적을 올바르게 입력하세요. 범위는 0 ~ 100 입니다.", score);
        }
        else
        {
            for(int i=0; i<TOTAL; i++){
                if(score>=SCORES[i]){
                    strcat(grade, GRADES[i]);
                    break;
                }
            }
            printf("학점은 %s입니다", grade);
        }
    }
}