我试图将我的calcArea函数中的数据传递给我的calcCost函数,但是我遇到了麻烦

时间:2016-02-16 03:26:27

标签: c function

我试图让我的calcCost功能现在正常工作。它不会携带区域变量。任何想法为什么它不起作用?我使用calcArea函数,但是我可以使用calcCost区域值的面积值吗?我开始尝试在那里放一个指针,但我还不熟悉它们。

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

// Define Constants
#define SALESTAX .07
#define TILEONE 0.78
#define TILETWO 1.59
#define TILETHREE 0.89
#define TILEONECASE 17.44
#define TILETWOCASE 10.89
#define TILETHREECASE 15.50
#define TILESIZE1 2.25
#define TILESIZE2 0.97222
#define TILESIZE3 1.77777
// Prototypes
void welcomeMessage(void);
char SelectChoice();
double getLength();
double getWidth();
double calcArea(double len, double wid);
double calcCost(double area);
void endMessage(void);
//integar return type, parameters are void,Richard's Flooring main function allows users to calculate room area and buy flooring.
int main (void)
{
//declare variables
double len, wid, area, tileNeeded,subTotal, taxTotal, total,cost;
double *dp;
char answer, myChoice;
dp = &area;


// Greets users and identifities program.
welcomeMessage ();
//Loop continues until user is done calculating area and buying flooring.

    printf("Choice | Dimesions | Price | Sq.FT.per case|\n 1     | 18 x 18   | $%.2lf |         17.44 |\n 2     |  7 x 20   | $%.2lf |         10.89 |\n 3     | 16 x 16   | $%.2lf |         15.50 |\n",TILEONE, TILETWO, TILETHREE);

    myChoice = SelectChoice();
    len = getLength();
    wid = getWidth();
    // calcArea function is a double return type, it calculates the Area entered in by the user, its parameters are double len and double wid
    area = calcArea(len,wid);
    printf("The area of your room is: %g square feet.\n",area);
calcCost(area);
//Provides users with publisher's name.
endMessage ();

return 0;
}
// no return type, tells users what kind of program they are using, and voids any parameters.
void welcomeMessage (void)
{
    printf("Welcome to Richard's Flooring\n");
    system ("pause");
    return ;
}

 // no return type, allows user to select choice
 char SelectChoice()
{
     char myChoice;

     do
     {
         printf("\nWhich tile choice would you like: ");
         scanf(" %c", &myChoice);

         switch(myChoice)
         { 
         case '1':
             printf("You chose choice: 1");
             break;


         case '2':
             printf("You chose choice: 2");
             break;


         case '3':
             printf("You chose choice: 3");
             break;


         default:
             printf("\nINVALID CHOICE 1 - 3 only!");

         }
     }

     while (myChoice > '3'|| myChoice < '1');
     return myChoice;

}

double getLength()
{
  double len;
 // loop continues until positive numbers are entered.
  do
  {
        printf("\nEnter length of room in feet: ");
        scanf(" %lf", &len);
        if (len <= 0)
        printf("\nLength must be positive number.");
  }
  while (len <=0);
  return len;
}


 double getWidth()
{
double wid;
// loop continues until positive numbers are entered.
do
{
    printf("\nEnter width of room in feet: ");
    scanf(" %lf", &wid);
    if (wid <= 0)
        printf("\nWidth must be positive number.");
}
while (wid <=0);
return wid;
}

// Double return type, which is returning Area. Calculates the Area in a  square or rectangle with the formula length * width. Accepts parameters from  double len and double wid.
double calcArea(double len, double wid)
{
    double area;
    area = (len * wid);
    return area;
}

double calcCost(double area)
{
    SALESTAX ;
    double  len, wid, tileNeeded,subTotal, taxTotal, total,cost;
    char answer, myChoice;
    area = calcArea(len,wid);

    do
    {


    char myChoice;
    if (myChoice == '1')
            {
                tileNeeded = area/TILESIZE1;
            }

    else if (myChoice == '2')
            {
                tileNeeded = area/TILESIZE2;
            }

    else if (myChoice == '3')
            {
                tileNeeded = area/TILESIZE3;
            }
    printf("You will need %.2lf pieces of tile\n", tileNeeded);
    subTotal = tileNeeded * TILETHREE;
    printf("Your subtotal is: $%.2lf \n", subTotal);
    taxTotal = subTotal * SALESTAX;
    printf("Your sales tax comes out to be: $%.2lf \n", taxTotal);
    total = taxTotal + subTotal;
    printf("Your grand total is: $%.2lf \n",total);
    printf("Would you like to measure another room?\n y or n:");
    scanf(" %c", &answer);
    }

 while (answer == 'y'|| answer == 'Y');
 }

// no return type, tells users Richard made the program, voids any parameters
void endMessage (void)
{
    printf("\nThese results were provided by Richard Triplett\n");
    system ("pause");
    return ;
}

1 个答案:

答案 0 :(得分:0)

在main中你有这些行来计算面积并将它传递给calcCost:

area = calcArea(len,wid);
printf("The area of your room is: %g square feet.\n",area);
calcCost(area);

这应该可以正常工作,但在calcCost中你有:

double  len, wid, tileNeeded,subTotal, taxTotal, total,cost;
char answer, myChoice;
area = calcArea(len,wid);

这会根据calcCost中定义的len和wid变量重新计算区域。这两个都从未设置为特定值,因此它们的值是不确定的,这导致整个区域不确定。

如果从calcCost中删除area = calcArea(len,wid);行,那么您将至少使用正确的区域值。

你也会遇到myChoice问题,因为这会在calcCost中重新定义,并且会有一个不确定的值。最简单的解决方案可能是使myChoice成为calcCost的附加参数,并从main传递它。

calcCost中的do循环也不能按要求工作。每按一次'y'或'Y',它将返回完全相同的答案。 do循环应该可以迁移到main中,但我现在已经完全删除了它。

需要进行更改:

中的

calcCost(area,myChoice);
calcCost中的

double calcCost(double area, char myChoice)
{
    double  tileNeeded,subTotal, taxTotal, total,cost;

    if (myChoice == '1')
            {
                tileNeeded = area/TILESIZE1;
            }

    else if (myChoice == '2')
            {
                tileNeeded = area/TILESIZE2;
            }

    else if (myChoice == '3')
            {
                tileNeeded = area/TILESIZE3;
            }
    printf("You will need %.2lf pieces of tile\n", tileNeeded);
    subTotal = tileNeeded * TILETHREE;
    printf("Your subtotal is: $%.2lf \n", subTotal);
    taxTotal = subTotal * SALESTAX;
    printf("Your sales tax comes out to be: $%.2lf \n", taxTotal);
    total = taxTotal + subTotal;
    printf("Your grand total is: $%.2lf \n",total);
 }