"可变"未在此范围内声明[C]

时间:2016-10-04 11:10:33

标签: c

编译main时出现以下3个错误:

  

[错误]"介质"未在此范围内宣布

     

[错误]" MAX"未在此范围内宣布

     

[错误]"分钟"未在此范围内宣布

     

[错误]"计算值"未在此范围内宣布

我是否需要在主内部扫描然后使用该功能?

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

typedef struct{
    char name[50];
    float medias;
}DATA;

DATA *p;


float calc(DATA *p,float media, float max, float min)
{
    int a;
    max=0;
    min=20;
    float soma=0; 
    for(a=0; a<3; a++)
    {
        printf("\nWrite the score of your %dº test: ", a+1);
        scanf("%f", p->medias);
        if (p->medias>max){
            max=p->medias;
        }
        if (p->medias<min){
            min=p->medias;
        }
        soma=soma+p->medias;
    }
    media=soma/3;
    return p, media, max, min;
}

int main()
{
    calc(p, media, max, min);
    system("cls");
    printf("Higher score: %f \nLowest score: %f \nMedia: %f", max, min, media);
    getch();
}

2 个答案:

答案 0 :(得分:2)

您尚未声明变量.wrapper { min-height: 100%; position: static; /* overflow: hidden; */ } mediamax。它们要么必须是min中的本地,要么是全局的。一般来说,最好将它们作为main中的本地文件,包括main,您将其作为全局放置,然后作为参数传递。

在您的计划中,pmediamaxmin中的参数。实际上,这些变量只能在calc内使用。

  

我是否需要在主内部扫描然后使用该功能?

如果你的意思是calc从键盘输入读取值,可能是的。这真的取决于你需要什么。

但是,当你确实需要首先声明变量时,你也会覆盖calc中的参数值,忽略传递给函数的任何值。

scanf()

答案 1 :(得分:1)

您的代码存在问题

1)您在函数定义中返回一个float,但返回四个值。如果需要返回多个值,则在全局数组中存储返回值或引用某个局部数组并填充它或使返回值为void只需更改步骤(2)中描述的calc函数内的值

2)如果你想让calc函数存储min,max和media中的值,你必须在main的第一行中像main float min, max, media;一样声明,并将值作为指针传递,所以calc应该是修改为calc(DATA *p,float* media, float* max, float* min),它应该在main中用作calc(p, &media, &max, &min ),在calc中你应该有*max=0;而不是max=0;

之类的语句 3)soma变量存储p-> medias 3次并将其除以3.所以最后它将存储p-> medias。所以不需要计算它只是为它赋值。