C语言学生成绩加权计算程序输入异常问题排查求助
问题解决
你遇到的所有输入异常都是因为scanf格式字符串末尾多写了\n导致的:scanf中的空白字符(空格、换行符\n、制表符\t等)会触发连续跳过所有后续输入的空白内容,直到匹配到非空白字符才会终止当前输入流程。所以你输入完对应数量的成绩后,程序不会立刻执行后续逻辑,必须额外输入一个非空白内容才会继续,这就是你遇到两个问题的核心原因。
具体修改方案
把代码中所有scanf语句格式字符串末尾的\n全部删除即可,修改后的完整代码如下:
#include <stdio.h> int main() { int testOne,testTwo,testPoint,totTest; float percTest; printf("Enter you test grades:\n"); scanf("%d%d",&testOne,&testTwo); totTest=testOne+testTwo; printf("Your total grade points is: %d\n", totTest); testPoint=200; percTest=(totTest*.40)/testPoint *100; printf("Your percentage is %.1f%%\n", percTest); int quizOne,quizTwo,quizThree,quizFour,quizPoint,totQuiz; float percQuiz; printf("Enter you quiz grades:\n"); scanf("%d%d%d%d",&quizOne,&quizTwo,&quizThree,&quizFour); totQuiz=quizOne+quizTwo+quizThree+quizFour; printf("Your total quiz grade is %d\n", totQuiz); quizPoint=400; percQuiz=(totQuiz*.30)/quizPoint *100; printf("Your quiz percentage is %.1f%%\n", percQuiz); int examOne,examPoint; float percExam,finGrade; printf("Enter your exam grade:\n"); scanf("%d",&examOne); printf("Your total exam points is: %d\n", examOne); examPoint=100; percExam=(examOne*.30)/examPoint *100; printf("Your final exam grade is %.1f\n", percExam); finGrade=(percExam+percQuiz+percTest); printf("Your overall grade is %.1f%%\n", finGrade); return 0; }
额外优化建议
- 可以把提示信息里拼写错误的
you改成your,提升可读性 - 可以增加输入合法性校验,避免输入非数字内容导致程序逻辑异常
内容的提问来源于stack exchange,提问作者Anthony Hatcher
相关产品推荐
相关产品推荐

