Prosty program przestał działać przy dzieleniu – gdzie jest błąd?

0

Cześć,
może mi ktoś powiedzieć co jest nie tak w tym zapisie?

#include <iostream>

using namespace std;
int maks = 10;

int main()
{
    cout << "Ile liczb chcesz wczytac do tablicy:  ";
    int n;
    cin >> n;

    cout << "Wczytaj liczby: " << endl;
    maks = n;
    double tab[maks];

    for(int i=0; i<n; i++)
    {
    cin >> tab[i];
    }

    for(int i=0; i<n; i++)
    {
    cout << "tab[" << i << "] = " << tab[i] << endl;
    }

    cout << "Ktory wyraz tablicy przez ktory chcesz podzielic?" << endl;
    double dzielna, dzielnik;
    cin >> dzielna;
    cin >> dzielnik;

    cout << "Dzielna: " << tab[dzielna] << endl;
    cout << "Dzielnik: " << tab[dzielnik] << endl;

    cout << "Wynik dzielenia: " << tab[dzielna]/tab[dzielnik];

    return 0;
}

Przestało działać przy dzieleniu, podejrzewam, że nie można tak tego zapisać, ale nie wiem jak inaczej. Proszę o pomoc :)

Błąd, który się wyświetla:

error: invalid types ‘double [maks][double]’ for array subscript| w linijce 31/32
2
double tab[maks];

To nie jest poprawny kod w C++. W tym języku nie ma obsługi VLA, tak jak w C. Użyj jakiegoś kontenera np. wektora albo zaalokuj tablicę dynamicznie (opcja niezalecana).

1
double tab[maks];

rozwiązaniem tego problemu jest zapis

double *tab = new double[maks]

Dlaczego tablica dynamiczna? Dlatego, że przy definiowaniu tablicy w C++ na stosie wielkość podawana w [ ] nie może być zmienną. Jeśli koniecznie chcesz uniknąć użycia new double[maks] to musisz definicję maks zmienić na taką:

const int maks = 10;

ale z tego co widzę w kodzie wielkość dla tablicy podaje użytkownik, więc siłą rzeczy nie będziesz jej znał w momencie kompilacji programu.
EDIT:
A jednak nie jest pobierana, zmyliło mnie przypisanie maks = n;

0

Wiem, że nie można zwykłej tablicy o rozmiarze zmiennej, a jak zmieniłam double tab[maks] na jakieś przykladowe double tab[10] to błąd wyświetla się ten sam wciąż. Co może być problemem?

2

error: invalid types ‘double [maks][double]’ for array subscript

Indeks tablicy musi być liczbą całkowitą, a u Ciebie jest to double.

0

Faktycznie, dziękuję @grzesiek51114. To był cały problem. :)

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