PDA

Visualizza la versione completa : [c] dove ho sbagliato??


matty.ma
12-12-2003, 13:08
Devo far decidere ad un giocatore quante parole deve immettere (almeno 10) e memomizzarle, come faccio??
dove ho sbagliato?

#include <stdio.h>
#include <string.h>

int main (void)

{

int a;
char parola[a][20];
char giocatore_uno[20];
char giocatore_due[20];
int cont;



printf ("Benvenuto nel programma\n");
printf ("Digitare il nome del primo giocatore :\n ");
scanf ("%s", giocatore_uno);
printf ("Digitare il nome del secondo giocatore :\n");
scanf ("%s", giocatore_due);


do
{
printf("%s quante parole vuoi immettere (Almeno 10) ? :\n", giocatore_uno);
scanf("%d", &a);
}
while
((a>=0)&&(a<=9));

cont=a;
cont++;

printf("Digita la parola :\n");
scanf (" %s", parola[a]);
printf("La parola digitata è: %s\n", parola[a]);

return (0);

}

Qualcuno me lo sa risolvere??
Grazie

Occam
12-12-2003, 13:52
Da quel poco che so di C non si può dichiarare un array di dimensioni variabili:

int a;
char parola[a][20];

Le dimensioni devono per forza essere costanti numeriche:

char[10][20];

kentaromiura
12-12-2003, 13:54
Originariamente inviato da Occam
Da quel poco che so di C non si può dichiarare un array di dimensioni variabili:

int a;
char parola[a][20];

Le dimensioni devono per forza essere costanti numeriche:

char[10][20];
esatto..
a meno che a non sia gia' stata definita.

LeleFT
12-12-2003, 13:55
Ci sono alcuni errori:

1) char parola[a][20] --> Non puoi dichiarare un array utilizzando una variabile per dimensionarlo: devi utilizzare una costante intera (o un numero oppure usi un #define a = <costante> all'inizio del programma)

2) Hai una variabile cont che non viene usata per nessun controllo (viene inizializzata con il numero letto e successivamente incrementata... :confused:

3) Quello che devi fare è mettere tutte le istruzioni dopo il ciclo do..while all'interno di un ciclo for (magari utilizzando quella variabile cont): for (cont=0; cont<a; cont++) { <istruzioni> }

Poi un suggerimento: togli dalla guardia del while la condizione (a>=0)... se la lasci l'utente potrebbe introdurre un valore negativo e per il programma questo sarebbe un valore valido.


Ciao.

infinitejustice
12-12-2003, 16:42
Da quel poco che so di C non si può dichiarare un array di dimensioni variabili

Si può allocando e riallocando la memoria dinamicamente ogni volta :)

int a;
char parola[a][20];

Qui infatti c'è un errore. Non ha senso dare a come dimensione all'array quando a nn è stata inizializzata.
O prima inizializzi a (e fai un array di dimensione statica) oppure devi andarci dinamicamente con un puntatore a puntatore a char: char **parola;

Giusto ieri c'era un thread sui puntatori a puntatori.

matty.ma
12-12-2003, 19:50
per costante a cosa ti riferisci cosa dovrei scrivere in #define a ? io non so che numero digiterà il primo giocatore???

infinitejustice
12-12-2003, 21:12
Se nn lo sai allora devi gestire l'array con dei puntatori e la memoria dinamica. Se ancora nn sei arrivato all'argomento fai finta di sapere il valore che verrà immesso :)

Cioè dai tu un valore ad a prima di dichiararlo come dimensione dall'array o metti direttamente la dimensione nell'array ciccio[10][20] almeno fino a quando nn arrivi alla mem dinamica :)

matty.ma
12-12-2003, 23:58
te non puoi farmi qualche esempio di come dovrei fare con la memoria dinamica, perchè ormai non me lo spiega più nessuno, se riesci a spiegarmi ti ringrazio

matty.ma
13-12-2003, 10:51
lo modificato così:
#include <stdio.h>
#include <string.h>

int main (void)

{
int n_par;
char parola[20];
char giocatore_uno[20];
char giocatore_due[20];
int cont;

printf ("Benvenuto nel programma\n");
printf ("Digitare il nome del primo giocatore :\n ");
scanf ("%s", giocatore_uno);
printf ("Digitare il nome del secondo giocatore :\n");
scanf ("%s", giocatore_due);

do
{
printf("%s quante parole vuoi immettere (Almeno 10) ? :\n", giocatore_uno);
scanf("%d", &n_par);
}

while(n_par<=9);

for (cont=0;cont<n_par;cont++)
{

printf("Digita una parola :\n");
scanf("%s", parola);

}
printf ("le parole digitate sono : %s\n", parola);


return (0);
}

Così funziona ma come logico gli rimane in memoria solo l'ultima parola... non c'è nessuno che me lo riesce a compilare con + parole o è un procedimento troppo lungo?

Loading