Questa cosa qui
Non è un array normale, ma è un VLA. I VLA sono una di quelle features che esiste in C ma non esiste in C++, il tuo codice è quindi sbagliato. Gli array normali si devono essere definiti con una dimensione costante. Quindi tu non puoi usare i VLA perché in C++ non sono supportati, ma non puoi usare nemmeno gli array normali perché dovresti conoscere la dimensione a tempo di compilazione. Hai due alternative:
Infine, per rispondere alla tua domanda, per leggere valori separati dallo spazio puoi usare cin nello stesso modo in cui lo useresti se i valori fossero separati da newlines. Il tuo codice potresti scriverlo in questo modo
Vista la difficoltà dell'esercizio suppongo che new e delete ancora non li hai studiati ma, come vedi, un valore costante va comunque bene.
C++:
int n;
cin >> n;
int a[n];
- fissi una dimensione massima ragionevolmente grande, almeno sei ragionevolmente sicuro che il tuo array è in grado di mantenere almeno
n
numeri, in questo modoC++:#include <iostream> int main() { int n; std::cin >> n; int a[4096]; // do something return 0; }
- allochi la memoria dinamicamente con
new
edelete
, in questo modoC++:#include <iostream> int main() { int n; std::cin >> n; int *a = new int[n]; // do something delete[] a; return 0; }
Questo pezzo di codice è sbagliato. Il primo elemento dell'array èC++:for(int i=n; i>0; i++){ cout << a[i] }
a[0]
e l'ultimo elemento è a[n-1]
, quindi il tuo ciclo for deve partire da n-1 (non n), deve continuare per tutti i numeri maggiori o uguali (non strettamente maggiori) a 0, e deve decrementare l'indice (i-- invece di i++).
C++:
for(int i = n - 1; i >= 0; i--){ cout << a[i] }
Infine, per rispondere alla tua domanda, per leggere valori separati dallo spazio puoi usare cin nello stesso modo in cui lo useresti se i valori fossero separati da newlines. Il tuo codice potresti scriverlo in questo modo
C++:
#include <iostream>
using namespace std;
int main() {
int n;
int a[4096];
cin >> n;
if (n > 4096) {
cout << "non puoi inserire più di 4096 numeri\n";
return 0;
}
for (int i = 0; i < n; i++) { cin >> a[i]; }
for (int i = n - 1; i >= 0; i--) { cout << a[i] << "\n"; }
return 0;
}
Vista la difficoltà dell'esercizio suppongo che new e delete ancora non li hai studiati ma, come vedi, un valore costante va comunque bene.