C/C++

Помогите, пожалуйста, исправить ошибку в коде (C++).

Условие задачи: Задан массив из n случайных целых чисел (число n вводится с клавиатуры,
его значение не больше 20). Определить максимальное количество следующих подряд
отрицательных элементов. В массиве могут быть все элементы положительные, и такой
вариант должен отрабатываться корректно. Сделать проверку на корректность ввода n.
Мой код:
#include <iostream>

using namespace std;

int main()

{

int n;

do{

cout<<"Vvedite n"<<endl;

cin>>n;}

while (n>20 or n<1);

const int SIZE = n;

int a[SIZE];

srand(time(0));

int max_el=0;

int k=0;

for(int i=0; i<n; i++){

a[i]=-50+rand() % 10;

cout<<a[i]<<"\t";

if(a[i]<0)

k++;

else if (k>max_el){

max_el=k;

k=0;

}

}

cout<<"\nKolichestvo otr ravno "<<max_el ;

return 0;

}
Ошибка в том, что в том случае, когда все числа в массиве отрицательные, выводится ответ "0"(см. фото).
ну так вы никогда не заходите в
else if (k>max_el){
max_el=k;
k=0;
}

С чего бы max_el тогда быть не равным нулю?
Надо этот момент учесть


Кстате эта же ошибка повторится и тогда когда у вас максимальное число отрицательных элементов будет последним в последовательности чисел

Ну, самое простое добавить еще одну такую же проверку после цикла
if (k>max_el){
max_el=k;
}

но наверное можно что-то красивей соорудить
Андрей Абакшонок
Андрей Абакшонок
5 536
Лучший ответ
 #include  
#include
#include
#include
#include
#define RAND(min, max) (rand() % ((max) - (min)) + (min))
using namespace std;
int main() {
const size_t m = 20;
array box{};
srand(unsigned(time(nullptr)));
const auto a = -50;
const auto b = a + 101;
for (auto& x : box) x = RAND(a, b);
size_t n = 0;
while (!n || n > m) {
cout > n;
}
size_t k = 0, t = 0;
for (size_t i = 0; i < n; ++i) {
cout k) k = t;
cout
SU
Samet Uluer
55 999
И сделайте нормальный вид кода, чтобы нормально замечать вообще что-то
 #include  
#include // для srand( time(0) );
#include // для srand( time(0) );

using namespace std;

int main()
{
int n;

do
{
cout n;
}
while (n > 20 || n < 1);

const int SIZE = n;
int a[SIZE];
srand( time(0) );
int max_el=0;
int k=0;

for(int i=0; i < n; i++)
{
a[i] = -50 + rand() % 10;
cout
Дима Шайдуров
Дима Шайдуров
78 510