更新:
最后的if语句if(lettergrade <= 'A' && lettergrade >= 'F')
不正确,因为F(70)的ascii值大于A(65)。
我试图打印C中函数返回的字符。
我的函数,assignletter,给出一个浮点数,并返回一个字符。
当我按原样运行程序时:
skirchbaum:~/workspace/HMWK/HMWK4 $ ./assignletter
Enter pointsgrade
100
Pointsgrade: 100.00 Lettergrade:
没有为lettergrade打印任何内容(我尝试了多个案例 - 100.1,1等)
我做错了什么?
CODE:
/* Input: a grade as points
Functionality: converts point grade into letter grade
Output: a char representing the letter grade, or -1 if error
LETTER GRADE BREAKDOWN:
A = 100 - 91
B = 90 - 81
C = 80 - 71
D = 70 - 61
F = 60 and below
*/
#include <stdio.h>
#include <stdlib.h>
#define DEBUG 1
char assignletter(float pointsgrade);
char lettergrade;
float pointsgrade;
int main(){
//Input a pointsgrade for debugging
#ifdef DEBUG
printf("Enter pointsgrade\n");
scanf("%f", &pointsgrade);
lettergrade = assignletter(pointsgrade);
printf("Pointsgrade: %.2f Lettergrade: %c\n", pointsgrade, lettergrade);
#endif
}
char assignletter(float pointsgrade){
char lettergrade;
//Grade A
if(pointsgrade <= 100 && pointsgrade >= 91){
lettergrade = 'A';
}
//Grade B
if(pointsgrade <= 90 && pointsgrade >= 81){
lettergrade = 'B';
}
//Grade C
if(pointsgrade <= 80 && pointsgrade >= 71){
lettergrade = 'C';
}
//Grade D
if(pointsgrade <= 70 && pointsgrade >= 61){
lettergrade = 'D';
}
//Grade F
if(pointsgrade <= 60){
lettergrade = 'F';
}
//Return letter grade or -1 if error
if(lettergrade <= 'A' && lettergrade >= 'F'){
return lettergrade;
}
else{
return -1;
}
}
答案 0 :(得分:1)
条件形成不良,{F}在ASCII中为70,而'A'为65,所以
if (lettergrade <= 'A' && lettergrade >= 'F') {
return lettergrade;
}
由于lettergrade('A')小于70('F')并且不大于,不会评估为true
你宁愿这样做
if (lettergrade >= 'A' && lettergrade <= 'F') {
return lettergrade;
}
通过翻转大于和小于标志
答案 1 :(得分:0)
您正在将lettergrade
分配给A(65)和F(70)之间的ASCII值。
但是,在这种情况下,您正在检查值是否小于A(65)且大于F(70)。
当然,如果lettergrade
介于A(65)和B(70)之间(它会),则return
语句不会被评估。
替换
if(lettergrade <= 'A' && lettergrade >= 'F'){
return lettergrade;
}
else{
return -1;
}
使用
if(lettergrade >= 'A' && lettergrade <= 'F'){
return lettergrade;
}
return -1;
作为额外提示,我建议您也取消else
声明。原因是只有在未执行其他return -1
语句时控件才会达到return
。