Почему это все время печатает ширину круга?

    #include "stdafx.h"
#include <iostream>
#include <string>
#include <cmath>


using namespace std;

const double PI = 3.141592653589793238463;

enum Figur {DREIECK, RECHTECK, KREIS};

struct Geo {
    mutable Figur figur;
    mutable double a, b, c;
};

Geo createGeo(Figur f, double a, double b, double c)
{
    Geo d;
    d.figur = f;
    d.a = a;
    d.b = b;
    d.c = c;
    return d;
}

Geo getGeo() {
    double a=0.0, b=0.0, c=0.0;
n:
    cout << "Please insert which geometrical object you want to create:" << endl;
    cout << "0 for triangle" << endl << "1 for rectangle" << endl << "2 for circle" << endl;
    Figur f;
    int p = 3;
    cin >> p;
    if (p == 0)
    {
        f = DREIECK;

        cout << "Please insert the length: ";
        cin >> a;

        cout << endl << "Please insert the width: ";
        cin >> b;

        {   m:
                cout << endl << "Please set the angle >0 and <180°: ";
                cin >> c;
                if (c <= 0 || c >= 180)
                {
                    cout << endl << "Invalid value! Please try again" << endl;
                    goto m;
                }
        }
        cout << endl << "Your figure is now going to be created" << endl;
        Geo geo = createGeo(f, a, b, c);
        return geo;
    }
    else if (p == 1)
    {
        f = RECHTECK;
        cout << "Please insert the length: ";
        cin >> a;
        cout << endl << "Please insert the width: ";
        cin >> b;
        cout << endl << "Your figure is now going to be created" << endl;
        Geo geo = createGeo(f, a, b ,0);
        return geo;
    }
    else if (p == 2)
    {
        f = KREIS;
        cout << "Please insert the radius: ";
        cin >> a;
        cout << endl << "Your figure is now going to be created" << endl;
        Geo geo = createGeo(f, a,0,0);
        return geo;
    }
    else
    {
        cout << "Invalid value. Please try again." << endl;
        goto n;
    }


}


double flaeche(Geo const &g)
{
    double flaeche;
    if (g.figur = DREIECK) 
    {
        flaeche = 0.5 * g.a*g.b;
    }
    else if (g.figur = RECHTECK)
    {
        flaeche = g.a*g.b;
    }

    else if (g.figur = KREIS)
    {
        flaeche = PI * pow(g.a, 2);
    }

    return flaeche;
}

void putGeo(double a, Geo &g)
{
    string typ;
    if (g.figur == DREIECK) typ = "triangle";
    else if (g.figur == RECHTECK) typ = "rectangle";
    else typ = "circle";
    cout << "Type of figure: " << typ << endl;
    if (g.figur == DREIECK) {
        cout << "Length: " << g.a << endl;
        cout << "Height: " << g.b << endl;
        cout << "Angle: " << g.a << endl;
        cout << "Area: " << a << endl;
    }
    else if (g.figur == RECHTECK) {
        cout << "Length: " << g.a << endl;
        cout << "Width: " << g.b << endl;
        cout << "Area: " << a << endl;
    }
    else if (g.figur == KREIS){
        cout << "Radius: " << g.a << endl;
        cout << "Area: " << a << endl;
    }
}

int main()
{
    Geo g1 = getGeo();

    double a = flaeche(g1);

    putGeo(a, g1);

    return 0;
}

Привет,

Надеюсь, вам будет легко понять этот пример кода. Я хотел создать программу, в которой пользователь должен создать геометрический объект через консоль.

Прямоугольник и треугольник пока работают неплохо, но с кругом есть небольшая проблема.

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

Может быть, кто-нибудь знает, почему это так?

Это упражнение из моего курса, и прямо сейчас я понятия не имею.

Программа была полностью на немецком языке, но я перевел ее. Для перечисления DREIECK - треугольник, RECHTECK - прямоугольник, а KREIS - круг.

Спасибо за вашу помощь.

РЕДАКТИРОВАТЬ ПРОБЛЕМУ С ВЫХОДОМ

Если я создам круг с радиусом 5

Я хочу напечатать через putGeo ()

Радиус: 5 Площадь: 78.5398163397

Но я действительно получаю

Радиус: 5 Ширина: 0 Площадь: 0

Какой точный результат вы получаете и чего ожидаете?

Carcigenicate 07.07.2018 16:39

Например, если я ввожу радиус 5 для круга, я хочу получить 5 ^ 2 * PI для площади. поэтому площадь должна быть 78,5398163397. С помощью putGeo () я просто хочу получить тип, радиус и площадь, напечатанные так: Тип: радиус круга: 5 Площадь: 78,5398163397

Etrix 07.07.2018 16:42

И в чем проблема? Опять же, покажите результат, который вы получаете, и то, что вы ожидаете получить, и опубликуйте его в самом вопросе.

Carcigenicate 07.07.2018 16:43

хорошо, изменилось - надеюсь, теперь стало более ясно

Etrix 07.07.2018 16:47
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
4
30
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Смотри сюда:

if (g.figur = DREIECK)

Вы намеревались использовать контрольная работа,, но это назначение.. Это устанавливает значение g.figur в DREIECK. После этого площадь будет рассчитана некорректно.

Хороший компилятор предупредит вас, когда вы используете присваивание таким образом. (Если вы подавляете или игнорируете предупреждения компилятора, вы создаете себе проблемы.)

Правильная форма

if (g.figur == DREIECK)

Огромное спасибо. Я все время следил за этим. Задача решена

Etrix 07.07.2018 17:01

Другие вопросы по теме