Невозможно получить выбор меню для запуска функции. C ++ - PullRequest
0 голосов
/ 24 февраля 2020

Я немного застрял. Я могу отобразить меню, но когда я делаю выбор, ничего не происходит, только мигающий курсор. Ни один из пунктов меню не работает. Какие-либо предложения? Мои навыки устранения неполадок состоят из компиляции исходного кода и надежды на лучшее. Я не знаю, как использовать отладчик. Я использую версию Visual Studio Community. Вот мой код Я студент первого курса, и это мой первый класс по С ++.

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

// Function prototypes
void displayMenu();
int getChoice(int min, int max);
double kilosToPounds(double);
double poundsToKilos(double);

/*****     main     *****/
int main()
{
    double weight = 0;
    int choice = 0;

    displayMenu();

    cout << "Please choose a function: ";
    cin >> choice;

    choice = getChoice(1, 3);

    while (choice == 1)
    {
        double kilosToPounds(weight);
    }
    while (choice == 2)
    {
        double kilosToPounds(weight);
    }
    while (choice == 3);
    {
        return 0;
    }
}

/*****     displayMenu     *****/
void displayMenu()
{
    int padding = 8;

    cout << "Program to convert weights:\n\n"
        << right
        << setw(padding) << "" << "1. Convert kilograms to pounds\n"
        << setw(padding) << "" << "2. Convert pounds to kilograms\n"
        << setw(padding) << "" << "3. Quit\n";

}


/*****     getChoice     *****/
// THIS IS THE SAME FUNCTION YOU WROTE EARLIER IN THIS SET
// OF LAB EXERCISES. JUST FIND IT AND PASTE IT HERE. 
int getChoice(int min, int max)
{
    int choice;
    // Get and validate the input
    cin >> choice;
    while (choice < min || choice > max)
    {
        cout << "Invalid input. Enter an choice between 1 & 3: ";
    }
    return choice;
}

/*****     kilosToPounds     *****/
double kilosToPounds(double weight)
{
    double kilo = weight / 2.2;
    cout << "This item weighs " << kilo << " kilos.\n";
    return 0;
}

/*****    poundsToKilos     *****/
double poundsToKilos(double weight)
{
    double pounds = weight * 2.2;
    cout << "This item weighs " << pounds << " pounds.\n";
    return 0;
}

Ответы [ 3 ]

0 голосов
/ 24 февраля 2020

В вашем коде есть несколько ошибок:

  1. Если у вас уже есть функция getChoice, которая принимает ввод от пользователя, зачем принимать ввод пользователя перед вызовом функции getChoice?
    cout << "Please choose a function: ";
    cin >> choice;   // <-- not needed
Почему вы используете while l oop, если хотите проверить только определенное состояние? Вместо этого используйте оператор if.
if (choice == 1) {...}

вместо

while (choice == 1) {...}
При вызове функции вам не нужно указывать тип возвращаемого значения.
auto pounds = kilosToPounds(weight);

или просто

kilosToPounds(weight);

вместо

double kilosToPounds(weight);

Демо

0 голосов
/ 24 февраля 2020

См. Ниже,

       cout << "Please choose a function: ";
       cin >> choice;

удалить выбор cin >>; потому что вы получаете выбор из getChoice (int, int); функция. так что здесь это не нужно.

и функция getChoice (int, int),

    int getChoice(int min, int max)
    {
      int choice;
      // Get and validate the input
      cin >> choice;
      while (choice < min || choice > max)
      {
          cout << "Invalid input. Enter an choice between 1 & 3: ";
      }
       return choice;
    }

У вас нет ввода в то время как l oop, поэтому, если вы введете выбор в меньше чем мин или больше, чем максимум, l oop становится бесконечным, потому что нет никаких изменений в переменной выбора. Так что берите ввод в l oop.

В main ()

, если выбор, равный 1 или 2, идет к бесконечному l oop, из-за этого

             while (choice == 1)..

и в main ()

             double kilosToPounds(weight);

это не способ вызова функции и у вас не было веса для вычисления.

полный код:

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


void displayMenu();
int getChoice(int,int);
double kilosToPounds(double);
double poundsToKilos(double);


int main()
{
    double weight = 0;
    int choice = 0;

    displayMenu();

    cout << "Please choose a function: ";
    choice = getChoice(1, 3);

    if (choice == 1)
    {
        cin>>weight;
        kilosToPounds(weight);
    }
    if (choice == 2)
    {
        cin>>weight;
        kilosToPounds(weight);
    }
    if (choice == 3);
    {
        return 0;
    } 
 }


void displayMenu()
{
    int padding = 8;

    cout << "Program to convert weights:\n\n"
         << right
         << setw(padding) << "" << "1. Convert kilograms to pounds"<<endl
         << setw(padding) << "" << "2. Convert pounds to kilograms"<<endl
         << setw(padding) << "" << "3. Quit"<<endl;

}


int getChoice(int min, int max)
{
    int choice;
    cin >> choice;
    while (choice < min || choice > max)
    {
       cout << "Invalid input. Enter an choice between 1 & 3: ";
       cin >> choice;
    }
    return choice;
}

double kilosToPounds(double weight)
{
     double kilo = weight / 2.2;
     cout << "This item weighs " << kilo << " kilos.\n"<<endl;
     return 0;
}


double poundsToKilos(double weight)
{
    double pounds = weight * 2.2;
    cout << "This item weighs " << pounds << " pounds."<<endl;;
    return 0;
}
0 голосов
/ 24 февраля 2020
  1. Вы уверены, что хотите использовать здесь l oop?
    while (choice == 1)
    {
        double kilosToPounds(weight);
    }
Если выбрано == 1, как и когда вы выйдете из l oop?

Также вы можете захотеть сделать что-то с вычисляемым значением:

        double weightInPounds = kilosToPounds(weight);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...