你那个ave是浮点类型的,结果你用它来保存一个char类型的值。
把char类型值赋给它时会自动转型成float。
结果就是在你的switch语句那里报错了,C的switch不支持浮点数的。
你另外用一个char 变量来存那个'A', 'B', 'C', 'D' 就行了。
比如:
char rank;
if(ave>=90) rank='A';
else if(ave>=80) rank='B';
else if(ave>=70) rank='C';
else if(ave>=60) rank='D';
else rank='E';
switch(rank)
.....
switch expression not integral说switch的表达式不是整型。
你的定义为float型。
改为switch( (int)ave)试试