-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.
任何人都可以帮助我吗?谢谢!