PDA

View Full Version : [C] scrivere un array


lorenzof_92
03-12-2011, 16:05
Ciao a tutti, mi sono iscritto perché la programmazione in linguaggio C mi da un pochino di problemi (non ho trovato una sezione di presentazione)!

Partiamo da un programmino semplice semplice ma che già non riesco a far funzionare...

#include <stdio.h>

int main ()
{

unsigned *A;
unsigned i;
unsigned l;
unsigned lunghezzaA;

scanf ("%u", &lunghezzaA);
printf ("scrivi gli elementi dell'array A \n");
for (i=1; i <= lunghezzaA; i++)
{
l=i-1 ;
printf ("stampa l'elemento in posizione %u", i);
scanf ("%u", &A[l]);
}
for (i=1; i <= lunghezzaA; i++)
{
l=i-1 ;
printf ("%u \t", A[l]);
}
return 0 ;
}

Dev c++ me lo compila tranquillamente, ma dopo che scrivo il primo elemento si sblocca e non me lo stampa... Il professore ricordo che usava unsigned * per indicare un array, googlando vedo però che si deve usare char *... Sbaglio nella dichiarazione dell'array, o in cosa?

Saverio92
03-12-2011, 16:59
ma perché usi unsigned? se è un vettore di interi devi usare int, se di caratteri invece char.
E poi credo sia sbagliata la creazione dell'array. Forse il tuo prof usava unsigned perché aveva creato un nuovo tipo. se vuoi creare un array di 20 interi ti conviene procedere così:
int array[20];
se invece sono caratteri:
char array[20];

cirano994
03-12-2011, 19:55
Allora, per allocare un array di dimensioni definite "dopo" la compilazione (quindi, ad esempio, su "richiesta" dell'utente) devi obbligatoriamente (che io sappia) utilizzare malloc (che, purtroppo, non avendola mai utilizzata, non potrei spiegarti).

Ma, visto che sembri "alle prime armi", forse ti conviene creare un array con una dimensione costante per renderti un po' più facili le cose.

Molto semplicemente:


#include <stdio.h>
#include <stdlib.h>

int main()
{
int v[N]; //N=lunghezza che desideri

for(int i=0;i<N;i++)
scanf("%d",&v[i]); //riempimento
for(int i=0;i<N;i++)
printf("%d",v[i]); //stampa
system("PAUSE");
}

lorenzof_92
03-12-2011, 20:44
Allora, per allocare un array di dimensioni definite "dopo" la compilazione (quindi, ad esempio, su "richiesta" dell'utente) devi obbligatoriamente (che io sappia) utilizzare malloc (che, purtroppo, non avendola mai utilizzata, non potrei spiegarti).

Ma, visto che sembri "alle prime armi", forse ti conviene creare un array con una dimensione costante per renderti un po' più facili le cose.


Ok grazie! Quindi proprio non si può dichiarare con una scanf pure quanto vale la N in questione?

In effetti malloc non l'ho fatto, però il professore ci aveva spiegato pure come fissare il massimo della lunghezza dell'array e poi decidere l'effettiva lunghezza, devo ritrovarlo tra le dispense...

ConRoe
06-12-2011, 09:37
La dimensione di un array in C va definita a tempo di compilazione e, conseguentemente non può essere definita a runtime. Per definire un "array" di dimensioni dinamiche, si usano le liste (c'entra la malloc() che ha menzionato qualcuno) che sono decisamente piu complesse da gestire rispetto ad un array. Per il tuo caso ti basta definire

int mioArray[DIM];

per inizializzare un array di interi (attenzione che dichiaratolo cosi non ti da la certezza di avere un array VUOTO!!!) oppure

char mioArray[DIM];

per dichiare un array di Char (ovvero una stringa)