C语言三科平均分计算程序输入异常原因及解决方法
问题原因与解决方案
问题原因
你的代码里所有scanf的格式控制字符串末尾都加了空格,比如:
scanf("%f ", &phy);
scanf在处理格式字符串时,会把空白字符(空格、换行、制表符等)视为"跳过所有连续空白"的指令。这意味着当你输入物理成绩并按下回车后,scanf不会立刻结束输入,它会一直等待你输入一个非空白字符(因为要跳过所有后续的空白),这就导致了"需要额外输入一个值"的异常。
解决方案
直接去掉每个scanf格式字符串末尾的空格,修改后的scanf语句如下:
scanf("%f", &phy); scanf("%f", &chem); scanf("%f", &bio);
额外优化建议
除了上述问题,你的代码还有几个不符合标准C规范的地方,可以一并修正:
void main不推荐:标准C中main函数的返回类型应该是int,建议改成int main(),并在末尾加上return 0;。- 变量与函数名重名:
avg函数内部的变量名也是avg,这会造成命名冲突,建议把变量名改成average。 - 函数声明与实际行为不符:
avg函数声明返回float,但内部没有return语句,要么改成void avg(...),要么加上return average;。
修正后的完整代码示例:
#include<stdio.h> // 改成void类型,因为不需要返回值 void avg(float x, float y, float z) { float average = (x + y + z) / 3; printf("average=%f", average); } int main() { float phy, chem, bio; printf("enter physics marks: "); scanf("%f", &phy); printf("\nenter chemistry marks: "); scanf("%f", &chem); printf("\nenter biology marks: "); scanf("%f", &bio); avg(phy, chem, bio); return 0; }
内容的提问来源于stack exchange,提问作者Geek
相关产品推荐
相关产品推荐

