C программирование вычисляет площадь прямоугольника

Я пишу программу для вычисления площади прямоугольника.

Eg.

Введите верхнюю левую точку: 1 1 (пользовательский ввод)
Введите нижнюю правую точку: 2 -1 (пользовательский ввод)
Верхний левый x = 1,000000 y: 1,000000
Нижний правый x = 2,000000 y: -1,000000 < br> Площадь = 2.000000 (выход программы)

Но мой:

Введите верхнюю левую точку: 1 1 (пользовательский ввод)
Введите нижнюю правую точку: 2 -1 (пользовательский ввод)
w: 1,000000
h: 2,000000
w*h: 2,000000
Прямоугольник Площадь: 1.000000 // Вот в чем проблема, вместо этого нужно вывести 2.000000.

.

typedef struct { 
    double x; 
    double y; 
} Point; 


typedef struct { 
    Point topLeft; /* top left point of rectangle */
    Point botRight; /* bottom right point of rectangle */
} Rectangle; 


Point p;
Rectangle r;


printf("Enter top left point : ");
scanf("%lf",&r.topLeft.x);
scanf("%lf",&r.topLeft.y);
fflush(stdin); 
printf("Enter bottom right point : ");
scanf("%lf",&r.botRight.x);
scanf("%lf",&r.botRight.y);
computeArea(&r);
printf("Rectangle Area : %lf",r);



double computeArea(Rectangle *r)
{ 
    double h=0,w=0,z=0;
    w=fabs(r->topLeft.x - r->botRight.x);
    printf("w : %lf\n",w);
    h=fabs(r->botRight.y - r->topLeft.y);
    printf("h : %lf\n",h);
    z=w*h;
    printf("w*h : %lf\n",z);
    return (z);
}

person user3425329    schedule 16.03.2014    source источник
comment
Ваша программа просто делает то, что вы ей сказали. Проверьте значение, которое вы печатаете в main().   -  person mfro    schedule 16.03.2014


Ответы (3)


вы не можете распечатать прямоугольник

Rectangle r;
// ...
printf("Rectangle Area : %lf",r); // <== you cannot print a Rectangle with printf

Включите предупреждения компилятора

person pmg    schedule 16.03.2014

Изменять:

computeArea(&r);
printf("Rectangle Area : %lf",r);

to:

printf("Rectangle Area : %lf", computeArea(&r));

Как уже отмечали другие, вам нужно добавить прототип для computeArea перед main (или переместить всю функцию выше main), и вы должны включить предупреждения компилятора, а затем понять и исправить все полученные предупреждения.

Также обратите внимание, что вы не должны использовать fflush(stdin) — никогда не вызывайте fflush для входного потока — это приводит к неопределенному поведению в большинстве систем.

person Paul R    schedule 16.03.2014

Поскольку никто на самом деле не объяснил саму проблему, проблема заключается в строке computeArea(&r);.

Эта функция возвращает результат в качестве возвращаемого значения, которое вы затем полностью игнорируете. Вы можете сохранить его в переменной следующим образом:

double area = computeArea(&r);

Затем вы можете напечатать двойное значение следующим образом:

printf("Rectangle Area : %f", area);

Вы также можете просто вызвать функцию в списке аргументов без добавления переменной, как показано в другом ответе. Дело в том, что вам нужно поймать возвращаемое значение.

Примечание: используйте только %f как с двойным, так и с плавающим числом (которое автоматически приводится к удвоению при использовании printf или другой функции с переменным аргументом). См. здесь подробнее об этом.

person hyde    schedule 16.03.2014