0
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define CONST 267


void getInput(int *length, int *width, int *height);
void calcoutput(int length, int width, int height, int *squareFootage,int         *paintNeeded);
int getSquareFootage(int length,int width, int height);
double getPaintNeeded(int squareFootage);


int main(void)
{
    int length;
    int width;
    int height;
    int squareFootage;
    double paintNeeded;


    getInput(&length, &width, &height);
    calcoutput(length, width, height,&squareFootage,&paintNeeded);


    return 0;
}   //end main

void getInput(int *plength, int *pwidth, int *pheight)
{
    printf("Enter the length of the room (whole number only): ");
    scanf("%d", plength);
    printf("Enter the width of the room (whole number only): ");
    scanf("%d", pwidth);
    printf("Enter the height of the room (whole number only): ");
    scanf("%d", pheight);
}   //end getInput
void calcoutput(int length, int width, int height, int *squareFootage,int *paintNeeded){

    *squareFootage = getSquareFootage(length,width, height);
    *paintNeeded = getPaintNeeded(squareFootage);

}

int getSquareFootage(int length,int width, int height){
    int i;
    i = 2*(length* height) + 2*(width*height) + (length* width);
return i;
}
double getPaintNeeded(int squareFootage)
{
    double i = double (squareFootage / CONST);
    return i;
}

我正在编写这段代码来计算房间的面积和粉刷房间所需的加仑油漆数量,但是,我对 C 中的指针不太熟悉,似乎有一些错误和警告像这样

C:\Users\khoavo\Desktop\hw2b.c||In function 'main':|
C:\Users\khoavo\Desktop\hw2b.c|23|warning: passing argument 5 of 'calcoutput' from incompatible pointer type|
C:\Users\khoavo\Desktop\hw2b.c|8|note: expected 'int *' but argument is of type 'double *'|
C:\Users\khoavo\Desktop\hw2b.c||In function 'calcoutput':|
C:\Users\khoavo\Desktop\hw2b.c|41|warning: passing argument 1 of 'getPaintNeeded' makes integer from pointer without a cast|
C:\Users\khoavo\Desktop\hw2b.c|10|note: expected 'int' but argument is of type 'int *'|
C:\Users\khoavo\Desktop\hw2b.c||In function 'getPaintNeeded':|
C:\Users\khoavo\Desktop\hw2b.c|52|error: expected expression before 'double'|
||=== Build finished: 1 errors, 2 warnings ===|

我将如何解决这些错误和警告?先感谢您。

4

3 回答 3

2

错误消息说明了一切:

calcoutput 将 int* 作为其第五个参数,但您将其传递给 double*。将第五个参数更改为双 *。

getPaintNeeded 需要一个 int,但您传递的是一个 int*。我认为在这种情况下你想要的是getPaintNeeded(*squareFootage).

最后一个错误是关于演员表的。您正在使用在 C++ 中支持但在 C 中不支持的函数样式转换,并且您正在编译为 C。要么编译为 C++(将文件扩展名更改为 .cpp),要么将行更改为:

double i = (double)(squareFootage / CONST);

实际上你根本不需要强制转换,结果可以隐式转换为双精度。

于 2012-10-22T21:42:15.490 回答
0

改变

void calcoutput(int length, int width, int height, int *squareFootage,int *paintNeeded);

void calcoutput(int length, int width, int height, int *squareFootage,double *paintNeeded);
于 2012-10-22T21:36:03.090 回答
0

paintNeeded 被声明为双精度,但您将其位置作为指向 int 的指针传递。您传递给它的函数将看到整数而不是双精度值,这会使您的程序运行不正确。

您应该考虑将 calcoutput 中的 int* 转换为 double* ,以便传入paintNeeded 行为正确。

于 2012-10-22T21:36:15.150 回答