-2

Making a new question, cause my old one died after taking to long to edit it. So I am trying to get rid of all these parameters in this code (Yes, some of the parameters are redundant but I just added them incase):

#include <stdio.h>

int main()
{
    //Top coord. of the square
    int top_x1 = 0;
    int top_y1 = 10;
    int top_x2 = 10;
    int top_y2 = 10;

    //Bottom coord. of the square
    int bottom_x1 = 0;
    int bottom_y1 = 0;
    int bottom_x2 = 10;
    int bottom_y2 = 0;

    //Left coord. of the square
    int left_x1 = 0;
    int left_y1 = 0;
    int left_x2 = 0;
    int left_y2 = 10;

    //Right coord. of the square
    int right_x1 = 10;
    int right_y1 = 0;
    int right_x2 = 10;
    int right_y2 = 10;

    parameter(top_x1, top_y1, top_x2, top_y2, bottom_x1,
              bottom_y1, bottom_x2, bottom_y2, left_x1,
              left_y1, left_x2, left_y2, right_x1, right_y1,
              right_x2, right_y2);
}

parameter (int top_x1,int top_y1,int top_x2,int top_y2,int bottom_x1,
              int bottom_y1,int bottom_x2,int bottom_y2,int left_x1,
              int left_y1,int left_x2,int left_y2,int right_x1,int right_y1,
              int right_x2,int right_y2)
{
    int totalParameter, topSide, bottomSide, leftSide, rightSide;

    topSide = (top_x2 - top_x1);
    bottomSide = (bottom_x2 - bottom_x1);
    leftSide = (left_y2 - left_y1);
    rightSide = (right_y2 - right_y1);

    totalParameter = (topSide + bottomSide + leftSide + rightSide);
    printf("%d\n", totalParameter);

}

works perfectly but too many parameters! If I try using structs...

#include <stdio.h>>

struct coordinates
{
    int x1, y1, x2, y2;
};

int main()
{
    struct coordinates top;
    struct coordinates bottom;
    struct coordinates left;
    struct coordinates right;

    //Top line of the square
    top.x1 = 0;
    top.y1 = 10;
    top.x2 = 10;
    top.y2 = 10;

    //Bottom line of the square
    bottom.x1 = 0;
    bottom.y1 = 0;
    bottom.x2 = 10;
    bottom.y2 = 0;

    //Left line of the square
    left.x1 = 0;
    left.y1 = 0;
    left.x2 = 0;
    left.y2 = 10;

    //Right line of the square
    right.x1 = 10;
    right.y1 = 0;
    right.x2 = 10;
    right.y2 = 10;

    parameter(top,bottom,left,right);
}

parameter(top, bottom, left, right)
{
    int totalParameter, topSide, bottomSide, leftSide, rightSide;

    topSide = (top.x2 - top.x1);
    bottomSide = (bottom.x2 - bottom.x1);
    leftSide = (left.y2 - left.y1);
    rightSide = (right.y2 - right.y1);

    totalParameter = topSide + bottomSide + leftSide + rightSide;
    printf("%d\n", totalParameter);

}

I want it to print out: 40.

Doesn't work though, any help please? Error I get is: "Request for member 'x1' in something not a structure of union. For all the x and y coords.

John Smith
  • 45
  • 1
  • 5
  • Why are there no type specifiers in the signature of 'parameter'? – XORcist Nov 23 '13 at 22:06
  • Firstly, in C language you have to declare function before you use them. Secondly, you first variant declared all parameters of `parameter` function with types. In the second variant you suddenly removed parameter types. Why did you remove the types? – AnT stands with Russia Nov 23 '13 at 22:11

1 Answers1

2

The function needs its return type defined and the type of its parameters defined, like so:

void parameter(struct coordinates top, struct coordinates bottom, struct coordinates left, struct coordinates right)

If you don't, the parameters default to type int (which is more of a history lesson in C than anything else). If you aren't forward declaring the function too, then it's being implicitly declared (which is illegal in modern C) and assumes your parameter and function types are different than what they should be (they all default to type int).

Community
  • 1
  • 1
Cornstalks
  • 37,137
  • 18
  • 79
  • 144