Сравнение заданного пользователем количества чисел внутри определенной пользователем функции в c ++

0

впервые постер здесь. Пожалуйста, имейте в виду, что я все еще очень новичок в c++ и кодировании в целом. Я пытаюсь переписать программу, которая запрашивает у пользователя, сколько чисел они хотят сравнить, затем они вводят значения каждого числа. Я достиг этого с помощью операторов if и if, но теперь я прошу сделать это с помощью определенных пользователем функций. Проблема, которую я имею до сих пор, заключается в том, что первое число, которое я вводил, является тем, которое было сохранено, но оно запрашивает дополнительные числа, а цикл for внутри функции работает правильно. Некоторые предложения о том, что я делаю неправильно, получили бы большую оценку. У меня есть все объявленные переменные, которые нужны, поэтому я только ставил прототип для сохранения в пространстве.

int main()
{ 

    int DisplayGreatest(int,int);

    do { 
        cout << "Please select an option" << endl;// Menu Options
        cout << "A: Highest" << endl;
        cout << "B:Lowest" << endl;
        cout << "C: Quit " << endl;

        cin >> Selection; // Menu Selection
        cout << endl;

        if ( (Selection == 'a') || (Selection == 'A') )
        {
                cout << "How many numbers do you want to use?" << endl;
                cin >> Aselection;
                cout << "enter your first choice" <<endl;
                cin >> currentAinput;
                    DisplayGreatest (Aselection,currentAinput); 

                cout << "The largest number is "<< currentAinput << endl;
        }
    }
}   

Функция:

int DisplayGreatest(int Aselection, int currentAinput) 
{
    int i;
    int keepAinput=0;


    for(i=1;i<Aselection;i++)
        {
            cin >> currentAinput;
            if (currentAinput > keepAinput) 
                {
                        keepAinput=currentAinput; 
                }
        }
    return currentAinput;            
}
Теги:
user-defined-functions

2 ответа

1

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

  • Сначала вы не используете возвращаемое значение из функции DisplayGreatest
  • Вы никогда не сравниваете первое значение, которое вы вводите с другими (вы делаете два cin подряд без предварительного сравнения)
  • Объявление функции DisplayGreatest в неправильной области (должно быть в глобальной области или помещать всю функцию перед основным)
  • У вас нет конечного условия для вашего do-loop в основном. (отсутствует в заявлении, возможно, у вас это есть в вашей собственной версии)
  • Вы вернули последнее значение, введенное в функцию DisplayGreatest, а не самую большую.

Вот функциональная версия:

#include <iostream>

using namespace std;

int DisplayGreatest(int Aselection) 
{
    int keepAinput = 0;
    int currentAinput;

    do {
        cin >> currentAinput;
        if (currentAinput > keepAinput) 
        {
            keepAinput = currentAinput; 
        }
    } while(--Aselection > 0);

    return keepAinput;
}

int main()
{
    char Selection;

    do {

        int Aselection;
        int currentAinput;

        cout << "Please select an option" << endl;// Menu Options
        cout << "A: Highest" << endl;
        cout << "B:Lowest" << endl;
        cout << "C: Quit " << endl;

        cin >> Selection; // Menu Selection
        cout << endl;

        if ( (Selection == 'a') || (Selection == 'A') )
        {
                cout << "How many numbers do you want to use?" << endl;
                cin >> Aselection;
                cout << "enter your first choice" <<endl;
                cout << "The largest number is "<< DisplayGreatest (Aselection) << endl;
        }
    } while(Selection != 'C' && Selection != 'c');
}
  • 0
    Большое спасибо! Да, у меня есть заявление while в исходном коде, я не хотел вставлять опции B и C, так как они не должны влиять на это. Книга, которую я использую, предлагает размещать функции после main, а прототипы - перед main. Есть ли реальное значение для этого? Я вижу, где сейчас находится не на месте прототип, спасибо за указание на это.
  • 0
    Не совсем, больше дело стиля и вкуса. Некоторые предпочитают сначала использовать main, и вы также получите хороший список всех функций в начале файла. Но с другой стороны вы должны измениться в двух местах. Функциональные возможности программы будут такими же. Для более поздних проектов есть большая вероятность, что вы будете использовать классы и / или файлы заголовков.
0

int DisplayGreatest(int,int) вероятно, должен быть объявлен в глобальном пространстве имен, то есть:

int DisplayGreatest(int, int);

int main()
{
}

int DisplayGreatest (int Aselection, int currentAinput)
{
}

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

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

cout << "Highest number is " << DisplayGreatest(Aselection, currentAinput) << endl;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню