Po powtórzeniu liczby cztery razy program wyświetla 0

0

Witam, po wpisaniu w pierwszym wierszu liczby 4 a w drugim czterech takich samych liczb program zwraca zero. Powie mi ktoś dlaczego tak się dzieje? Dla jasności program powinien zwracać 1.

#include <iostream>
#include <cstdlib>

long long int ilosc, max1, max2, max3, max4;
long long int wynik;
using namespace std;

int main()
{
    cin >> ilosc;
    long long int liczba[ilosc];
    for (long long int i = 0; i < ilosc; i++) {
        cin >> liczba[i];
    }
    for (long long int i = 0; i < ilosc; i++) {
        if (liczba[i] > max1)
            max1 = liczba[i];
    }
    for (long long int i = 0; i < ilosc; i++) {
        if (liczba[i] == max1)
            liczba[i] = 0;
        if (liczba[i] > max2)
            max2 = liczba[i];
    }
    for (long long int i = 0; i < ilosc; i++) {
        if (liczba[i] == max2)
            liczba[i] = 0;
        if (liczba[i] > max3)
            max3 = liczba[i];
    }
    for (long long int i = 0; i < ilosc; i++) {
        if (liczba[i] == max3)
            liczba[i] = 0;
        if (liczba[i] > max4)
            max4 = liczba[i];
    }
    wynik = max4 * max4;
    if (ilosc < 4) {
        cout << "0" << endl;
    }
    else
        cout << wynik << endl;
    system("pause");
    return 0;
}
1
cin>>ilosc;
long long int liczba[ilosc];

Ten fragment kodu jest niepoprawny. Próbujesz zaalokować tablicę na stosie, której rozmiar nie jest znany w momencie kompilacji wskutek czego kompilator nie wie ile pamięci ma na nią przeznaczyć. Przecież translacja kodu wyższego poziomu do kodu maszynowego dzieje się przed wykonaniem programu.

Używaj std::vector - to jest dynamiczna struktura danych, która ma zmienny rozmiar.

0

Mógłbyś podesłać zmodyfikowaną część programu? Nie do końca wiem jak z vectora korzystać.

1 użytkowników online, w tym zalogowanych: 0, gości: 1