嵌套功能!错误。请赐教

时间:2013-12-01 09:01:47

标签: c

你能帮我解决这个问题的人是c编程吗?我不明白为什么当我尝试编译代码时我得到嵌套函数。我总是有ISO禁止嵌套函数。请帮我理解代码。 3天。我失去了理智。我还是c编程新手。谢谢!

#include<stdio.h>
#define lcost 35;
#define tax 0.85;
void readData(int* Len,int* Wid,float* Disc,float* cost);
int calcInPrice(float area,float iPrice,float cost,int Len,int Wid);
int calcSTotal(float sTotal,float Disc,float iPrice,float tDisc);
int calcTPrice(float tPrice,float ctax,float sTotal);
void printMes(int Len, int Wid);
void printCharges(float area,float cost,float iPrice,float Disc,float tDisc,float tPrice,float ctax,float sTotal);

int main(void)
{
int x;
int Len, Wid;
float item;
float area, cost, Disc, iPrice, sTotal, tDisc, tPrice, ctax;

do{
system("cls");
printf("[1] Perform\n");
printf("[2] Exit progres\n");
printf("\n\nInput Selection:");
scanf("%d", &x);

switch (x)
{
case 1:

readData(&Len,&Wid,&Disc,&cost);
calcInPrice(area,iPrice,cost,Len,Wid);
calcSTotal(sTotal,Disc,iPrice,tDisc);
printMes(Len,Wid);
printCharges(area,cost,iPrice,Disc,tDisc,sTotal,ctax,tPrice);

printf("\n\nPress any key to return to main menu");
getch();

break;

case2:
system("cls");
printf("Exiting Program");
break;

default:
        printf("\n\nInvalid Selection!");
}

}while(x < 3);

void readData(int* Len,int* Wid,float* Disc,float* cost)
{

printf("Input Length of Room: ");
scanf("%d",Len);

printf("Input Width of Room: ");
scanf("%d",Wid);

printf("Input Discount of Customer: ");
scanf("%f",Disc);

printf("Input the cost per square foot: ");
scanf("%f",cost);

return;

}

int calcInPrice(float area,float iPrice,float cost,int Len,int Wid)
{
    area = Len * Wid;

    iPrice = (lcost * area) + (cost * area);

    return;

    }


int calcSTotal(float sTotal,float Disc,float iPrice,float tDisc)
{
    Disc = (Disc / 100)*iPrice;
    sTotal = iPrice - (tDisc);

return;
}


int calcTPrice(float tPrice,float ctax, float sTotal)
{
ctax = sTotal * tax;
tPrice = sTotal + ctax ;
}


void printMes(int Len, int Wid)
{
printf("\n\t\tMEASUREMENT\n\n");
printf("Length\t\t %d ft", Len);
printf("Width\t\t %d ft", Wid);
printf("\nArea\t\t %d square ft", Len * Wid);

return;

}

void printCharges(float area,float cost,float iPrice,float Disc,float tDisc,float tPrice,float ctax,float stotal)
{

float item = cost * area;

printf("\n\n\t\tCHARGES\n\n");

printf("DESCRIPTION\tCOST/SQ.FT.\tCHARGE");

printf("\n________\t _________\t______");

printf("\nCarpet \t%.2f \t %0.2f ",cost,item);

printf("\nLabor \t %lf \t %0.2f",lcost, area);

printf("\n\t\t\t__________"); 
printf("INSTALLED PRICE \t\t %.2f", iPrice); 
printf("\nDiscount \t %.2f \t %.2f ",Disc,tDisc);

printf("\n\t\t\t\t______");
printf("\nSUBTOTAL\t\t\t %.2f",sTotal);
printf("\nTax\t\t\t\t %2f",ctax);
printf("\nTOTAL\t\t\t\t %.2f",tPrice);

return;

}

return 0;
}

3 个答案:

答案 0 :(得分:1)

您的代码如下所示:

int main(void)
{
    ...

    void readData(int* Len,int* Wid,float* Disc,float* cost)
    {
        ...
    }

    ... more functions ...

    void printCharges(float area,float cost,float iPrice,float Disc,float tDisc,float tPrice,float ctax,float stotal)
    {
        ...
    }

    return 0;
}

表示您在readData函数中“嵌套”了所有函数定义(printChargesmain等)。

这是不允许的。

相反,你需要写一些更像这样的东西:

int main(void)
{
    ...

    return 0;
}

void readData(int* Len,int* Wid,float* Disc,float* cost)
{
    ...
}

... more functions ...

void printCharges(float area,float cost,float iPrice,float Disc,float tDisc,float tPrice,float ctax,float stotal)
{
    ...
}

答案 1 :(得分:1)

您无法在标准C中的其他功能中定义功能。

您可以在函数内部声明一个函数,但它不是嵌套函数。

gcc有language extension that allows nested functions。它们是非标准的,因此完全依赖于编译器。

答案 2 :(得分:1)

问题是在开始定义readData()函数之前你的main函数没有结束,所以对于编译器来说,你看起来就是在main()中定义“readData()”。这称为嵌套,在C中无效。这就是为什么选择C语言中的缩进和括号位置样式很重要的一个原因。

我将帮助你弄清楚如何解决它,通过将程序恢复到更好的基础来开始,你可以逐步重新引入其余的代码 - 不要只是将它全部添加到一起,但是逐个添加它并确保它可以正常工作。

#include <stdio.h>

// proto-type, tells the compiler that we will define this function later.
void readData(int*, int*, float*, float*);

int main()
{
    int Len, Wid;
    float Disc, Cost;

    printf("in main\n");

    readData(&Len, &Wid, &Disc, &Cost);

    return 0;
} // end of main()

void readData(int* Len, int* Wid, float* Disc, float* Cost)
{
    printf("We're in readData now\n");
} // end of readData()
<{3}}上{p> Here it is所以你可以看到它有效。