¿Por qué estoy obteniendo basura (no deseada) aquí?

Cada vez que escribo el siguiente código, obtengo resultados basura (inesperados) en algún compilador en línea, pero si uso el bloque de código, obtengo resultados satisfechos. @ ¿Entonces mi pregunta es por qué obtengo este tipo de salida?

por ejemplo, si ingreso

5 7
+ 5
- 10
- 20
+ 40
- 20

entonces estoy recibiendo

22 1

en el bloque de código. Pero en el compilador en línea, es otra cosa.

#include<iostream>
#include<cstdlib>
using namespace std;
int main()
{
    int have, n, i;
    int kid=0;

    cin>>n>>have;

    int line[n];

    for(i=0;i<n;i++)
    {
        cin>>line[i];

        if(line[i]>=0)
            have+=line[i];
        else
        {
            if(have>=abs(line[i]))
                have+=line[i];
            else
                kid++;
        }
    }

    cout<<have<<" "<<kid<<endl;

}

Respuestas a la pregunta(1)

Su respuesta a la pregunta