c언어 과제 중 성적 등급 판단 코드를 짤 일이 있었는데, 문자열을 어떻게 처리해야 하는지 몰라 정리할 필요가 있다고 느꼈다.
밑의 코드는 성적을 조건별로 A, B, C, D, F로 분기하는 코드다. 여기서 각 등급을 +, -을 붙여 세분화하고 싶었다.
#include <stdio.h>
int main() {
int score;
char grade;
printf("성적을 입력해주세요: ");
scanf("%d", &score);
if (score < 0 || score > 100) {
printf("잘못된 점수입니다. 0에서 100 사이의 점수를 입력해주세요.\n");
} else if (score >= 90) {
grade = 'A';
} else if (score >= 80) {
grade = 'B';
} else if (score >= 70) {
grade = 'C';
} else if (score >= 60) {
grade = 'D';
} else {
grade = 'F';
}
printf("점수 %d는 %c 등급입니다.\n", score, grade);
return 0;
}
C에서는 Java와 달리 String 타입이 없다. C에서 문자열은 다음과 같은 특징이 있다.
- 문자열은 char 배열이다.
- 문자열의 끝에는 널 문자 '\0'가 들어간다.
- 문자열을 출력할 때는
%s를 사용한다.
C에서는 문자열을 다루는 함수들이 별도로 <string.h> 헤더 파일에 정의되어 있다.
완성한 코드는 다음과 같다.
#include <stdio.h>
#include <string.h>
int main() {
int score;
char grade[3];
printf("성적을 입력해주세요: ");
scanf("%d", &score);
if (score < 0 || score > 100) {
printf("잘못된 점수입니다. 0에서 100 사이의 점수를 입력해주세요.\n");
} else if (score >= 95) {
strcpy(grade, "A+");
} else if (score >= 90) {
strcpy(grade, "A0");
} else if (score >= 85) {
strcpy(grade, "A-");
} else if (score >= 80) {
strcpy(grade, "B+");
} else if (score >= 75) {
strcpy(grade, "B0");
} else if (score >= 70) {
strcpy(grade, "B-");
} else if (score >= 65) {
strcpy(grade, "C+");
} else if (score >= 60) {
strcpy(grade, "C0");
} else if (score >= 55) {
strcpy(grade, "C-");
} else if (score >= 50) {
strcpy(grade, "D");
} else {
strcpy(grade, "F");
}
if (score >= 0 && score <= 100) {
printf("점수 %d는 %s 등급입니다.\n", score, grade);
}
return 0;
}
strcpy()는 문자열을 복사하는 함수이다.
strcpy(grade, "A+")는 "A+"라는 문자열을 grade 배열에 복사한다는 의미이다.
이때 grade 배열에는 다음과 같이 저장된다.
- grade[0] : 'A'
- grade[1] : '+'
- grade[2] : '\0'
strcpy()를 사용하지 않는다면 다음과 같이 배열의 각 요소에 문자를 개별적으로 대입해야 한다.
grade[0] = 'A';
grade[1] = '+';
grade[2] = '\0';