Проблемы с этим Q: Разрешить пользователю вводить значения массива и делать так с помощью For, хотя в циклах также выводится наибольшее введенное число - PullRequest
0 голосов
/ 05 февраля 2020

Мне нужно создать функцию, которая использует для l oop или пока l oop и массив, чтобы отобразить наибольшее число из группы чисел, и у меня возникли проблемы с вопросом в title.

Когда я запускаю этот код, он не позволяет пользователю вводить сколько угодно элементов в массиве, который он хочет, и не останавливается, когда пользователь хочет остановиться, вводя букву, например, g для ex. Он также не выводит наибольшее число в конце того, что пользователь хочет ввести в массив.

Что именно не так с моим кодом?

   #include <iostream>
   using namespace std;

   void printarray(int array[], int size)
   {
for (int i = 0; i < size; i++)
{
    cout << array[i] << endl;
}

return;
   }

    int main()
    {
   const int SIZE = 2000;
   int count = 0;
   int userinput[SIZE];
   int largest = 0;


for (int i = 0; i < SIZE; i++)
{
    if (cin >> userinput[i])
    {
        count++;

    }   
    else
    {
        break;
    }

    while (count < userinput[i])
    {
        if (largest < userinput[i])
        {
            largest = userinput[i];
        }

        count++;                

                 }}

       printarray(userinput, count);

       cin.clear();
       cin.ignore();

       return 0;
          } 

1 Ответ

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

Проблема кода в плохом отступе.

for (int i = 0; i < SIZE; i++)
{
    if (cin >> userinput[i])
    {
        count++;

    }   
    else
    {
        break;
    }

    while (count < userinput[i])
    {
        if (largest < userinput[i])
        {
            largest = userinput[i];
        }

        count++;                

                 }}

Пока l oop находится внутри для l oop. И это условие пока l oop

count < userinput[i]

не имеет смысла.

Разделите циклы.

for ( size_t i = 0; i < SIZE; i++ )
{
    if (cin >> userinput[i])
    {
        count++;

    }   
    else
    {
        break;
    }
}

int largest = count == 0 ? 0 : userinput[0];

for ( size_t i = 1; i < count; i++ )
{
     if ( largest < userinput[i] )
     {
         largest = userinput[i];
     }
}

Примите во внимание, что вы можете использовать стандартный алгоритм std::max_element, объявленный в заголовке <algorithm>

Например,

auto it = std::max_element( userinput, userinput + count );

if ( it != userinput + count ) largest = *it;

Функция printarray может быть объявлена ​​и определена как

std::ostream & printarray( const int array[], size_t size, std::ostream &os = std::cout )
{
    for ( size_t i = 0; i < size; i++ )
    {
        os << array[i] << ' ';
    }

    return os;
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...