Как сделать вызов функции с инструкциями switch после того, как пользователь выберет свою опцию? - PullRequest
0 голосов
/ 19 октября 2019

image

Я пытался вызвать функцию здесь, но я не знаю, что происходит не так. Я получаю сообщение об ошибке:

Используется неинициализированная локальная переменная 'area'

Мы должны использовать регистр switch. Если кто-то может помочь исправить это, это будет здорово.

// Include Section
#include <iostream>
#include <cstdlib>
using namespace std;

//Function prototype
double rectangle(double, double);
double triangle(double, double);
double circle(double);

// Main Program
int main()
{
    //Variable declaration
    int choice;
    const double PI = 3.14159; //pi
    double area;
    double length, //length for rectangle
            width; //width for rectangle
    double height; //height for triangle
    double base; //base for triangle
    double radius; //radius for circle

    //Give choices
    cout << "Welcome to Geometry Calculator \n";
    cout << "Pick one option from the following: \n";
    cout << "1. Calculate the Area of a Rectangle \n";
    cout << "2. Calculate the Area of a Triangle \n";
    cout << "3. Calculate the Area of a Circle \n";
    cout << "4. Quit \n\n";

    //input choice
    cout << "Enter your choice (1-4): ";
    cin >> choice;

    //Input Validation
    while (choice <= 0 || choice > 4)
    {
        cout << "Please enter a valid menu chice: ";
        cin >> choice;
    }

    //Switch statement
    switch (choice)
    {
        case 1: //rectangle
            cout << "Enter the LENGTH of your Rectangle: ";
            cin >> length;
            cout << "Enter the WIDTH of your Rectangle: ";
            cin >> width;
            rectangle(length, width);
            //function
            break;

        case 2: //Triangle
            cout << "Enter the LENGTH of the base of your Triangle: ";
            cin >> base;
            cout << "Enter the HEIGHT of your Triangle: ";
            cin >> height;
            triangle(base, height);
            return 0;
            break;

        case 3: //Circle
            cout << "Enter the RADIUS of your Circle: ";
            cin >> radius;
            circle(radius);
            return 0;
            //calculation
            break;

        case 4: //quit
            cout << "You chose to quit. Thanks for using my program! \n\n";
    }
    return 0;
}

//function call
void triangle(double base, double height);
{
    area = base * height * 0.5;
    cout << "The AREA of your Triangle is " << area << ". \n\n";
}

void circle(double radius);
{
    area = PI * radius * radius;
    cout << "The AREA of your Circle is " << area << ". \n\n";
}

double fc = rectangle(double length, double width);
{
    area = length * width;
    cout << "The area of the rectangle is " << area << endl;
}

1 Ответ

2 голосов
/ 19 октября 2019

У вас есть несколько проблем:


В определениях функций не должно быть конечной точки с запятой:

void triangle(double base, double height);  // <-- remove this semicolon
{
    area = base * height * 0.5;
    cout << "The AREA of your Triangle is " << area << ". \n\n";
}

Эта ошибка присутствует и в других определениях,Точка с запятой завершает объявление функции forward (вверху файла), но при определении функции скобки заменяют его.


Вы также объявляете три функции triangle / circle / rectangle для возврата double, но в реализации вы определяете их для возврата void, что не совпадает. Вероятно, это источник конкретной ошибки, которую вы получаете.

Измените либо предварительные объявления, чтобы они соответствовали определениям, либо наоборот.


Эти три функции также пытаютсяприсвойте переменной area, которая не входит в область видимости. Эта переменная должна быть объявлена ​​в этих функциях, если вы хотите использовать ее там.

Обратите внимание, что переменная area в main() недоступна из этих функций.


определение для rectangle начинается с объявления переменной, которое не имеет смысла:

double fc = rectangle(double length, double width);

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

void rectangle(double length, double width)

или

double rectangle(double length, double width)

Функция circle() относится к символу PI, но это не входит в объем. (Вы объявляете PI внутри main(), чтобы оно было видно только внутри этой функции. Это можно исправить, переместив его в глобальную область видимости.)

...