我必须创建一个使用 for 循环或 while 循环和一个数组的函数,以显示一组数字中的最大数字,我在标题中的问题遇到了问题。
当我运行此代码时,它不允许用户在数组中输入他想要的元素数量,并且当用户想要通过输入像 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;
}
代码的问题在于其缩进错误。
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;
}
请注意,程序中没有任何地方输出最大的元素。