Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [c] dove ho sbagliato??

    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

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    62
    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];

  3. #3
    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.

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,083
    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...

    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.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it L'avatar di infinitejustice
    Registrato dal
    Nov 2001
    residenza
    Barcelona
    Messaggi
    773
    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.

    Live fast. Troll hard.
    Pythonist | Djangonaut | Puppeteer | DevOps | OpenStacker | Lost in malloc
    Team Lead @Gameloft Barcelona

  6. #6
    per costante a cosa ti riferisci cosa dovrei scrivere in #define a ? io non so che numero digiterà il primo giocatore???

  7. #7
    Utente di HTML.it L'avatar di infinitejustice
    Registrato dal
    Nov 2001
    residenza
    Barcelona
    Messaggi
    773
    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
    Live fast. Troll hard.
    Pythonist | Djangonaut | Puppeteer | DevOps | OpenStacker | Lost in malloc
    Team Lead @Gameloft Barcelona

  8. #8
    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

  9. #9
    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?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2019 vBulletin Solutions, Inc. All rights reserved.