注册 登录
编程论坛 C语言论坛

萌新求助~~求n个数的平均数,运行是对的但提交上去错了

小神女 发布于 2020-10-24 16:25, 2328 次点击
程序代码:
#include<stdio.h>
int main()
{
    float a,b,ave;
    int n,i;
    a=0;
    scanf("%d\n",&n);
    for(i=1;i<=n;i++)
    {
        scanf("%f ",&b);
        a+=b;
    }
    ave=a/n;
    printf("%.2f\n",ave);
return 0;   
}
[local]1[/local]
10 回复
#2
小神女2020-10-24 16:30
只有本站会员才能查看附件,请 登录
#3
小神女2020-10-24 16:30
只有本站会员才能查看附件,请 登录
#4
小神女2020-10-24 17:40
#include<stdio.h>
int main()
{
    float a,b,ave;
    int n,i;
    a=0;
    scanf("%d\n",&n);
    for(i=1;i<=n;i++)
    {
        scanf("%f",&b);
        a+=b;
    }
    ave=a/n;
    printf("%.2f\n",ave);
return 0;   
}

自己做出来了
#5
风过无痕19892020-10-24 17:57
回复 4楼 小神女
你4楼这个程序能运行?

算了,编辑修改,告诉你错在什么地方

 变量 a 没有赋初值,scanf()中使用了回车符

程序代码:

#include<stdio.h>
int main()
{
    float a=0,b,ave;    // a 没有赋初值,输出结果存在不确定性
    int n,i;
    a=0;
    scanf("%d",&n);     // 多了一个换行符,有残留给第一个 b 值的可能
    for(i=1;i<=n;i++)
    {
        scanf("%f",&b);
        a+=b;
    }
    ave=a/n;
    printf("%.2f\n",ave);
return 0;   
}


[此贴子已经被作者于2020-10-24 20:08编辑过]

#6
小神女2020-10-28 11:08
回复 5楼 风过无痕1989
谢谢!!我稀里糊涂改的,提交上去对了就没管。谢谢你,我现在知道错在哪里了
#7
lin51616782020-10-28 16:27
以下是引用风过无痕1989在2020-10-24 17:57:50的发言:

你4楼这个程序能运行?

算了,编辑修改,告诉你错在什么地方

 变量 a 没有赋初值,scanf()中使用了回车符


#include<stdio.h>
int main()
{
    float a=0,b,ave;    // a 没有赋初值,输出结果存在不确定性
    int n,i;
    a=0;
    scanf("%d",&n);     // 多了一个换行符,有残留给第一个 b 值的可能
    for(i=1;i<=n;i++)
    {
        scanf("%f",&b);
        a+=b;
    }
    ave=a/n;
    printf("%.2f\n",ave);
return 0;   
}

第一个scanf前面就是给a赋值了
多个换行 但在这里不会导致出错
后面的%f后面的空格倒是有必要删掉
残留给b 看不懂是什么意思
#8
风过无痕19892020-10-29 02:05
回复 7楼 lin5161678
多个换行 但在这里不会导致出错

你用DEV运行一下他原来的程序,看看出不出错;
后面的%f后面的空格倒是有必要删掉
残留给b 看不懂是什么意思

scanf()函数输入完成后,回车符残留在输入缓冲流里的例子,并不少见,运行一个下面这个程序
程序代码:

#include<stdio.h>
int main()
{
    int m,e,choice1;
    char choice2;
    double a,cost;
    printf("Enter how much gas a = ");
    scanf("%lf",&a);
    printf("90# gas seclet 90\n");
    printf("93# gas select 93\n");
    printf("97# gas select 97\n");
    printf("Enter choice1:");
    scanf("%d",&choice1);
        
    switch(choice1)
    {
    case 90#:cost=6.95 * a;break;
    case 93#:cost=7.44 * a;break;
    case 97#:cost=7.93 * a;break;
    default:cost=0.00;break;
    }
   
    printf("self-service select m\n");
    printf("ancillary-service select e\n");
    printf("Enter choice2:");
    scanf("%c",&choice2);

    if(choice2 == 'm')
    {
        cost=cost * (1-0.05);
    }
    else if(choice2 == 'e')
    {
        cost=cost * (1-0.03);
    }
    else
        printf("\n");
        printf("You need pay %.2f yuan\n",cost);
    return 0;
}
#9
lin51616782020-10-29 09:25
以下是引用风过无痕1989在2020-10-29 02:05:10的发言:

只有本站会员才能查看附件,请 登录

我知道\n滞留缓冲区的问题
你不知道什么情况下\n滞留缓冲区会导致问题

这里的scanf 一个是%d 一个是%f 根本不会被\n干扰
开始处理%f之前遇到\n 会字节跳过
正在处理%f遇到\n 会结束读取
完全正常合理
#10
lin51616782020-10-29 09:26
纠正
残留就常量 --> 残留就残留
#11
lin51616782020-10-29 09:27
回复 8楼 风过无痕1989
什么情况下 \n滞留缓冲区会导致scanf运行不符合预期??
只有2种情况需要考虑
1 %c格式控制
2 %[]会读取\n的情况

明白了吗
1