2016-10-04 62 views
-4

我编译主,当有这3个错误:“变量”是不会在这个范围内声明[C]

[错误]“媒体”并不在此范围内声明

[错误]”最大”未在此范围中声明

[错误]‘min’是没有在这个范围中声明

[错误]‘计算值’未在此范围中声明

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

#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(); 
} 
+1

因为您从未声明过任何变量'max或min或media' – sinsuren

+8

'return p,media,max,min;'这是恐怖 – artm

+0

我不确定您的最终问题中的“扫描”是什么意思。 “扫描主内部”意味着什么? –

回答

1

您have't声明的变量mediamaxmin。他们需要在main或全球本地。一般来说,将它们设置为main的本地值是一个不错的主意,其中包括p,您已将它们作为全局参数,但作为参数传递。

在您的程序中,media,maxmin是参数calc。原样,这些变量只能在calc之内使用。

我需要扫描主内部然后使用函数吗?

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

但是,虽然您肯定需要首先声明变量,但您也会覆盖calc内参数的值,忽略传递给函数的任何值。

float calc(DATA *p,float media, float max, float min) 
{ 
    int a; 
    max=0; 
    min=20; 
1

有代码中的问题

1)您在返回函数定义的浮动,但返回there.If你需要在全球数组或引用返回多个值店返回值四个值2)如果你想使用calc函数来存储min,max和media中的值,那么你可以使用一个局部数组来填充它,或者将返回值设置为void,只需要改变步骤(2)中描述的calc函数内部的值。

将不得不在main的第一行中声明float min, max, media;,并将值作为指针传递因此,计算的应该被修改为calc(DATA *p,float* media, float* max, float* min),它应该在主用作calc(p, &media, &max, &min)和钙内你应该有像的*max=0;代替max=0;

3)胞体变量存储对 - >媒体3次并除以3它陈述所以最后它会存储p->媒体。所以不需要计算它只是给它赋值。