【问题标题】:"variable" was not declared on this scope [C]“变量”未在此范围内声明 [C]
【发布时间】:2017-02-12 12:42:00
【问题描述】:

我在编译 main 时遇到这 3 个错误:

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

[错误]"max" 未在此范围内声明

[Error]"min" 没有在这个范围内声明

[错误]"calc" 没有在这个范围内声明

我需要在main里面扫描然后使用函数吗?

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

【问题讨论】:

  • 因为你从来没有声明过任何变量max or min or media
  • return p, media, max, min; 这太恐怖了
  • 我不确定您在最后一个问题中所说的“扫描”是什么意思。 “scan inside main”是什么意思?
  • "我在编译 main 时有这 3 个错误:" - 看起来像 4 个错误
  • 你当然需要读一本好书。 @Ishkyzone

标签: c


【解决方案1】:

您尚未声明变量mediamaxmin。它们要么需要在main 中是本地的,要么是全局的。一般来说,将它们作为本地 main 是一个好主意,包括 p 您已将其设置为全局但随后作为参数传递。

在您的程序中,mediamaxmincalc 中的参数。事实上,这些变量只能在 calc 内部使用。

我需要在main里面扫描然后使用函数吗?

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

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

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

【讨论】:

    【解决方案2】:

    你的代码有问题

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

    2) 如果您希望 calc 函数将值存储在 min、max 和 media 中,您必须在 main 的第一行中声明 float min, max, media; 并将值作为指针传递,因此 calc 应修改为calc(DATA *p,float* media, float* max, float* min) 并且它应该在 main 中用作 calc(p, &amp;media, &amp;max, &amp;min ) 并且在 calc 中你应该有像 *max=0; 这样的语句而不是 max=0;

    3) soma 变量存储 p->medias 3 次并将其除以 3。所以最后它将存储 p->medias。因此无需计算,只需为其赋值即可。

    【讨论】:

      猜你喜欢
      • 2016-09-18
      • 2017-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多