You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言三科平均分计算程序输入异常原因及解决方法

问题原因与解决方案

问题原因

你的代码里所有scanf的格式控制字符串末尾都加了空格,比如:

scanf("%f ", &phy);

scanf在处理格式字符串时,会把空白字符(空格、换行、制表符等)视为"跳过所有连续空白"的指令。这意味着当你输入物理成绩并按下回车后,scanf不会立刻结束输入,它会一直等待你输入一个非空白字符(因为要跳过所有后续的空白),这就导致了"需要额外输入一个值"的异常。

解决方案

直接去掉每个scanf格式字符串末尾的空格,修改后的scanf语句如下:

scanf("%f", &phy);
scanf("%f", &chem);
scanf("%f", &bio);

额外优化建议

除了上述问题,你的代码还有几个不符合标准C规范的地方,可以一并修正:

  1. void main不推荐:标准C中main函数的返回类型应该是int,建议改成int main(),并在末尾加上return 0;。
  2. 变量与函数名重名:avg函数内部的变量名也是avg,这会造成命名冲突,建议把变量名改成average。
  3. 函数声明与实际行为不符: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 15:25:14