我必须创建一个使用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;
}
代码的问题是缩进不良。
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;
}
请注意,程序中没有输出最大的元素。