难以解决此问题:允许用户输入数组的值,并使用For,While循环这样做,也输出输入的最大数字

问题描述 投票:0回答:1

我必须创建一个使用for循环或while循环和一个数组的函数,以显示一组数字中的最大数字,而标题中的问题让我感到麻烦。

当我运行此代码时,它不允许用户在数组中输入任意数量的元素,并且当用户希望通过输入诸如g的字母来表示停止时,它也不会停止。在用户要输入的数组末尾,它也不会输出最大的数字。

我的代码到底有什么问题?

   #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;
          } 
c++ algorithm loops for-loop max
1个回答
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++;                

                 }}

while循环位于for循环内。而while循环的这种条件

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;
}

请注意,程序中没有输出最大的元素。

© www.soinside.com 2019 - 2024. All rights reserved.