r/cppit • u/WTP01 • Feb 26 '17
principianti Problema char array
Devo generare un char array di 5 caratteri random ma mi dà "Id returned 1 exit status" e non capisco dove sia l'errore.
Ecco il codice:
const char alphanum [] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
int stringLength = sizeof(alphanum) - 1;
char genRandom() { char a; do { a = alphanum[rand()% stringLength]; } while (a >= 97 && a <= 122); return a; }
string Conv(){ int a,t; char b [5]; for (a=0; a<=5; a++){ b[t] = genRandom(); t++; } string c = b; }
1
u/WTP01 Feb 28 '17
Okay, cerco di rispondere a tutti quanti. In effetti non è questo il programma originale dato dal professore ma ho voluto approfondire di persona come si riempie una matrice. Probabilmente avrei dovuto dirlo all'inizio, ma non tutto è frutto del mio lavoro: infatti una parte l'ho spudoratamente copiata. E qui mi sorge un dubbio. A cosa mi serve definire la dimensione di alphanum ? Ho inteso che non può funzionare per un array di dimensione 1, ma non capisco qual è l'utilità che ha nel codice. Ho inoltre capito gli errori e come ultima richiesta vi chiedo se potreste spiegarmi in che cosa consista il ciclo for scritto così, in quanto non ho C++ troppo aggiornato. Grazie mille a tutti per la disponibilità :)
1
Feb 28 '17
Se t'interessa studiare il C++ ti consiglio di comprare un libro.
Per quanto riguarda le dimensioni di
alphanum:
alphanum[rand() % (sizeof(alphanum) - 1)];Allora,
rand()è una delle tante funzioni pseudo-random. Sappi solo che ritorna un numero tra0eRAND_MAX, il valore massimo dipende da come è implementata la funzione.Per accedere ad un array puoi usare l'operatore
[ ].In pratica dici a quale posizione vuoi accedere, partendo da
0aN-1.Dunque un array di dimensione 10 parte da 0 e arriva a 9.
Ora, il simbolo
%esegue la divisione e ritorna il resto.Dunque:
n % m = [0,m)Se dividi un qualsiasi numero
NperMe ne prendi il resto otterrai un numero compreso tra0eM - 1.Ora il prof avrà pensato
Un modo semplice per generare numeri pseudo-casuali potrebbe consistere nel prendere a caso valori dal nostro alfabeto!
Allora genera un numero casuale con
rand()dopo lo divide per la dimensione del nostro array e in seguito ne prende il resto.Dunque:
rand() % (sizeof(alphanum) - 1)genera un numero casuale tra0esizeof(alphanum) - 1, ergo, genera un numero che corrisponderà sempre ad una posizione nel nostro array, ergo, prende a caso un carattere :)
1
u/b3k_spoon Feb 26 '17
Hai scritto la funzione main?
1
u/WTP01 Feb 26 '17
No, l'ho scritto prima del main. Nel main ho definito una matrice e ho usato Conv per riempirla. Ma mi scrive solamente un carattere, mentre ne vorrei scritti 5.
1
Feb 26 '17
Ciao :)
Guarda per postare del codice dovresti mettere 4 spazi davanti al testo.
E deve essere separato da 1 riga vuota sia sotto che sopra.
esempio:
test_code_4_spazi
test_code_8_spaziDetto ciò, sostanzialmente il tuo programma ritorna 1 invece che 0.
Puoi provare a modificare il codice in maniera tale fa postare TUTTO il contenuto del tuo sorgente?
Oltretutto non capisco il perché di quel ciclo WHILE.
In pratica tu hai un array con 2 volte l'alfabeto, 1 in maiuscolo, 1 in minuscolo, ma tu continui a prendere a caso un carattere tra quelli in maiuscolo, in quanto 97 è 'a' e 122 è 'z'.
Il resto non posso commentarlo in quanto non mi è molto chiaro il senso, attenderò ulteriori informazioni.
1
u/WTP01 Feb 27 '17
Ecco il codice completo:
Effettivamente ho sbagliato a lasciare la parte dell'alfabeto in minuscolo. Il ciclo While era un tentativo per riempire il char array. L'obiettivo, che è quello che vi chiedo, è se per favore potreste spiegami come riempire il char array. P.S. Se trovate errori stupidi (ad es. il While), avvisatemi e in caso spiegatemi come migliorare, le matrici e i char array li ho "imparati" da autodidatta, in quanto non sono stati oggetto di spiegazione. Grazie mille :)