-2
私はCプログラミングには比較的新しいので、ユーザーのマークを読み取り、入力されたマークにグレードを割り当てるプログラムをコーディングしようとしています。 私はgetline()
関数を使用してユーザー入力を取得しました。以下は私のコードです。予想通り値は常に集計されません
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
# include <ctype.h>
int getMark();
void display(char grade);
char convert(int mark);
int getMark() {
do {
int marks;
char * buffer;
char characters;
size_t bufsize = 16;
buffer = (char *)malloc(bufsize * sizeof(char));
if(buffer == NULL) {
perror("Unable to allocate buffer");
exit(1);
}
printf("Enter the score (0 - 100)\nOr just press the enter key to quit ==> ");
characters = getline(&buffer, & bufsize, stdin);
int i;
long check;
for (i = 0; i < sizeof(buffer); i++) {
if (buffer[i] == '\n' && i != 0) {
buffer[i] = '\0';
}
if (isdigit(buffer[i]) || buffer[i] == '\0') {
check++;
}
}
if (buffer[0] == '\n') {
return -1;
} else if (check == strlen(buffer) - 1) {
marks = atoi(buffer);
} else {
printf("Please enter an integer.\n");
continue;
}
if (marks >= 0 && marks <= 100) {
return marks;
} else {
printf("Sorry, your marks can only be between 0 to 100.\n");
continue;
}
} while (1);
}
void display(char grade) {
printf("The grade for the input score is %c \n", grade);
}
char convert(int mark) {
mark /= 10;
char grade;
switch(mark) {
case 0:
case 1:
case 2:
case 3:
grade = 'F';
break;
case 4:
grade = 'E';
break;
case 5:
grade = 'D';
break;
case 6:
grade = 'C';
break;
case 7:
grade = 'B';
break;
case 8:
case 9:
case 10:
grade = 'A';
}
return grade;
}
int main() {
int marks;
for (;;) {
marks = getMark();
if (marks == -1) {
break;
}
display(convert(marks));
}
return 0;
}
私はを押すと、プログラムが終了し、を入力します。 整数が入力された場合、たとえば12
の場合、出力は常にPlease enter an integer.
となります。ありがとう!