2016-10-04 140 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->媒體。所以不需要計算它只是給它賦值。