Hayden's Archive
[C언어] 배열 관련 코드 본문
큰따옴표(")를 출력해야 했는데 아스키코드를 활용하여 출력했다.
이전에는 입력을 받을 때 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);
}
}
}