Как исправить логические ошибки, вызванные неправильным вызовом функций в C ++ - PullRequest
0 голосов
/ 15 февраля 2019

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

Я почти уверен, что ошибка заключается в int main () и void shape_output (... void area_output (... functions

#include <iostream>
#include <iomanip>
using namespace std;


void show_menu();
int user_choice();
int calc_area();
void shape_output(int);
void area_output(int);

int main()
    {
        int area;
        int shape;
        show_menu();
        shape = user_choice();
        area = calc_area();
        shape_output(shape);
        area_output(area);
        return 0;
    }

void show_menu()
    {
        cout << "Calculating the area of a shape\n\n"
             << "1.  Circle\n"
             << "2.  Rectangle\n"
             << "3.  Square\n"
             << "4.  Quit\n"
             << "Enter the number of your choice: " << endl;
    }

int user_choice()
    {
        int  CIRCLE = 1;
        int  SQUARE = 2;
        int  RECTANGLE = 3;
        int  QUIT = 4;

        int choice;
        cin >> choice;
        if(choice < CIRCLE || choice > QUIT)
            {
                cout << "Please enter a valid menu choice" << endl;
                cin >> choice;
            }
        return choice;
    }

int calc_circle()
    {
        double radius,
               area,
               Pi = 3.14;

        cout << "Enter the radius: ";
        cin >> radius;
        if(radius < 0)
            {
                cout << "Invalid, Try again: ";
                cin >> radius;
            }
        area = Pi * radius * radius;
        return area;
    }

int calc_rectangle()
    {
         double height,
                width,
                area;

        cout << "Enter the height: ";
        cin >> height;
        if(height < 0)
            {
                cout << "Invalid, Try again: ";
                cin >> height;
            }
        area = height * width;
        return area;
    }

int calc_square()
    {
        double base,
               area;

    cout << "Enter the base: ";
    cin >> base;
    if(base < 0)
        {
            cout << "Invalid, Try again: ";
            cin >> base;
        }
    area = base * base;
    return area;
    }

void quit()
    {
        cout << "Have a good day!\n";
    }

int calc_area()
    {

        const int  CIRCLE = 1;
        const int  SQUARE = 2;
        const int  RECTANGLE = 3;
        const int  QUIT = 4;
        int choice = user_choice();


        switch(choice)
            {
                case CIRCLE:
                    calc_circle();
                    break;
                case SQUARE:
                    calc_square();
                    break;
                case RECTANGLE:
                    calc_rectangle();
                    break;
                case QUIT:
                    quit();
                    break;
                default:
                    quit();
                    return 0;
                    break;

            }
        return choice;
    }

void shape_output(int answer_choice)
    {
        cout << "Shape: " << answer_choice << endl;
    }

void area_output(int answer_area)
    {
        cout << "Area: " << answer_area << endl;
    }

) Я ожидаю, что вывод будет таким:

choose the shape:
number of the shape
specific dimension of a shape:
dimension(s)

shape: chosen shape
area:  calculated area

но вывод, который я получаю:

choose the shape:
number of the shape
number of the shape ( I have to put it in twice)
specific dimension of a shape:
dimension(s)

shape: number of the chosen shape, not the actual word
area:  number of the chosen shape again.

1 Ответ

0 голосов
/ 19 февраля 2019

По сути, я понял, что весь мой код был мусором, поэтому я написал все это с самого начала.

У меня было много проблем с правильным вызовом функций и заполнением параметров и аргументов, поэтому япросмотрел некоторые основные учебники по функциям и включил их в мой код.Спасибо всем за комментарии.

#include <iostream>
#include <iomanip>
#include <cmath>

using namespace std;

//Declaring function prototypes.

int question();
double option(int);
double input_fun();
double calc_circle(double);
double calc_square(double);
double calc_rect(double, double);
void output(double, double);

// main function where all the other functions are called from
int main()
{
    int choice;         // not related to `int choice` in `double question()`
                        // Data from question() function will be stored in `int choice`.

    double option_case; // Data from `double option()` will be stored here.

    choice = question();
    option_case = option(choice);
    output(choice, option_case);

    return 0;
}

// function to prompt the user to choose a shape or quit
int question()
{
    int choice;
    cout << "Please choose a shape\n"
        << "Press 1 for CIRCLE\n"
        << "Press 2 for SQUARE\n"
        << "Press 3 for RECTANGLE\n"
        << "Press 4 to QUIT\n";
    cin >> choice;

    while (choice < 1 && choice > 4)
        {
        cout << "Invalid entry, Try again: \n";
        cin >> choice;
        }
    return choice;
}

// Function to determine user's choice
double option(int choice)
{
    double calc_area,
        radius,
        length,
        width;

    switch (choice) // Depending on user's choice, switch case decides what functions to call
    {
    case 1:
        cout << "Enter Radius of the circle\n";
        radius = input_fun();
        calc_area = calc_circle(radius);
        return calc_area;
        break;
    case 2:
        cout << "Enter the base of the square\n";
        length = input_fun();
        calc_area = calc_square(length);
        return calc_area;
        break;
    case 3:
        cout << "Enter the length\n";
        length = input_fun();
        cout << "Enter the width\n";
        width = input_fun();
        calc_area = calc_rect(length, width);
        return calc_area;
        break;
    case 4:
        return 0;
        break;
    }
}

// This function is activated when user is prompted to
// enter the dimension of the chosen shape.
double input_fun()
{
    double value;
    cin >> value;
    while (value < 0)
    {
        cout << "Value is lower than 0, try again: \n";
        cin >> value;
    }
    return value;
}

//this function is activated if user chooses a circle.
double calc_circle(double radius)
{
    double Pi = 3.14;
    double power = 2.0;
    return(Pi * pow(radius, power));
}

//this function is activated if user chooses a square.
double calc_square(double base)
{
    double power = 2.0;
    return(pow(base, power));
}

//this function is activated if user chooses a rectangle.
double calc_rect(double length, double width)
{
    return(length * width);
}

void output(double shape, double area)
{
    if(shape == 4)
        cout << "Have a nice day\n";
    else
    {
        cout << "Shape: " << shape << endl;
        cout << "Area: " << area << endl;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...