遇到此问题时遇到困难:允许用户输入数组的值并使用 for,而循环也输出输入的最大数字



我必须创建一个使用 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;
}

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

相关内容

最新更新