안녕하세요, 팀미션 해결하다가 질문이 생겨서 여쭤봅니다!
제가 작성한 코드를 실행해보면 숫자 입력에 대해서는 오류없이 잘 돌아가는데
문자입력에 대해서는 무한루프 돌면서 오류가 납니다!
scanf로 입력받고 나서 if문과 함께 isdigit(score)쓰는 방법도 고려해보았으나 잘 되지 않았습니다.
문자입력을 받을 때 또한 오류없이 "성적을 올바르게 입력하세요"를 띄우고 싶은데
어떻게 코딩하면 좋을지 잘 모르겠습니다.
문자열 입력을 어떤 방법으로 방지할지 조언 부탁드려요!
그리고 코드에서 개선해야 할 점 있으면 조언 부탁드립니다!
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <cs50.h> #include <ctype.h> int CalculateGrade(void); int main(void) { CalculateGrade(); } int CalculateGrade(void) { // 학점과 기준 점수 선언 char *grades[] = {"A+", "A", "B+", "B", "C+", "C", "D+", "D", "F"}; int scores[] = {95, 90, 85, 80, 75, 70, 65, 65, 60, 0}; int n = sizeof(grades) / 8; // 문자 하나 당 1바이트 = 8비트 // 학점 테이블 printf("학점 프로그램\n"); printf("종료를 원하면 \"999\" 를 입력\n"); printf("[학점 테이블]\n"); for (int i = 0; i < n; i++) { printf("점수 : %d\t", scores[i]); } printf("\n"); for (int i = 0; i < n; i++) { printf("학점 : %s\t", grades[i]); } printf("\n"); // 성적 입력 받기 int score; string grade; while(1) { printf("성적을 입력하세요 ( 0 ~ 100 ) : "); scanf("%d", &score); // 0 - 100 범위일 때 if (score>=0 && score<=100) { for (int a = 0; a < 9; a++) { if (score >= scores[a]) { printf("학점은 %s 입니다.\n", grades[a]); break; } } } // 학점 프로그램 종료 else if (score == 999) { printf("학점 프로그램을 종료합니다.\n"); break; } // 0-100 범위를 벗어날 때 유효성 체크 else { printf("** %d 성적을 올바르게 입력하세요. 범위는 0 ~ 100 입니다.\n", score); } } return 0; }
comment