Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    4

    programma in C: ricerca errori

    Buongiorno a tutti.
    Avrei bisogno del vostro aiuto per correggere alcuni messaggi di errore/warning su questo programmino (implementa il gioco forza 4 in linguaggio C).

    Ecco i messaggi di errore (compilatore MinGW):

    In function 'main':
    9:5: warning : missing braces around initializer
    9:5: warning : (near initialization for 'gameZone[0]')
    42:83: error : expected ':' before ';' token"

    codice:
    int main()
    {
        char gameZone[ MAXLINE ][ MAXCOLUMN ] = { 0 };  /* Questo è il campo di gioco */
        int line, column;  /* Variabili che mi servono per limitare la grandezza del campo di gioco */
        int limits;  /* Serve per limitare la scelta dell'utente. Su campi di gioco diversi la scelta può cambiare */
        int mode;  /* Serve per memorizzare la modalità di gioco */
        int turnMax;  /* Turni massimi possibili */
        int turn = 0;
        int victory;
        Player playerOne, playerTwo;    /* Dichiaro i due di giocatori con il tipo struct player */ 
        
        intro();
        clrscr();
        
        start();
        clrscr();
        
        gameMode( &mode );  /* Passo &mode perchè il parametro di questa funzione è un puntatore */
        clrscr();
        
        insertName( playerOne.name, playerTwo.name, mode );
        clrscr();
        
        chooseGameZone( &line, &column, &limits, &turnMax );
        clrscr();
        
        chooseSign( &playerOne, &playerTwo );
        createGameZone( gameZone, line, column );
        
        do
        {
            clrscr(); 
            printGameZone( gameZone, turn, line, column );
            /* Qui il giocatore sceglie la mossa che deve fare */
            turn % 2 == 0 ?
            printf( "\n\n\n\n\n%s", turn % 2 == 0 ? playerOne.name  : playerTwo.name );
            printf( ", fai la tua mossa" );
            while( choosePosition( mode, gameZone, &turn, limits, line, playerOne.sign, playerTwo.sign ) );  /* Finchè la mossa non è corretta non uscire dal ciclo */
        } while( !( victory = win( gameZone, turn, turnMax, line, column ) ) );  /* Il valore di victory mi serve per determinare il messaggio finale */
        clrscr();
        
        printf( "\t\t\t Situazione finale" );
        
        printGameZone( gameZone, turn, line, column );
        getch();  /* Stoppa il programma per vedere la situazione finale */
        clrscr();   
        
        end( playerOne.name, playerTwo.name, victory, turn );
        clrscr();
        getch();
    
        return 0;
    }
    "In function 'insertName':
    112:10: warning: format '%s' expects type 'char*' but argument 2 has type 'char**'
    117:10: warning: format '%s' expects type 'char*' but argument 2 has type 'char**'

    codice:
    /* Funzione insertName */
    /* Due parametri ( due stringhe ) e nessun uscita */
    /* Inserisce il nickname nella struttura Player */
    
    void insertName( char *t, char *n )
    {
         do {
             printf( "Inserisci il tuo nome [Player 1]" );
             scanf( "%s",&t );
             printf( "\t%s\n\n", t );
             gets( n );
             printf( "\n" );
             printf( "Inserisci il tuo nome [Player 2]" );
             scanf( "%s",&t );
             printf( "\t%s\n\n", t );
             if( strcmpi( n, "CPU" ) == 0 )
                 printf( "Il nome %s non puo' essere usato! Usane un altro!\n\n", *n );
         } while( strcmpi( n, "CPU" ) == 0 );                 
    }
    Ho riportato solo le parti di codice interessate dai messaggi (in realta' non riesco ad individuare gli errori indicati!).

    Spero che riusciate ad aiutarmi ad individuare e correggere gli errori.

    grazie mille a tutti

  2. #2
    Cominciamo dalla funzione insertName.
    Passi come parametro due puntatori a carattere, poi fai la scanf sul rifermento del puntatore (che è un puntatore a puntatore) di cui l'errore.
    Togli & dalle scanf. Altra cosa, scanf sarebbe da evitare perché 9 volte su 10 ti sporca il buffer di lettura rendendo impossibile leggere dati dallo standard input.

    Su main:

    codice:
    /* Qui il giocatore sceglie la mossa che deve fare */
    turn % 2 == 0 ?
    printf( "\n\n\n\n\n%s", turn % 2 == 0 ? playerOne.name : playerTwo.name );
    Usi l'operatore terziario ma manca la seconda scelta, pertanto ti dice che mancano i : prima del ;.

    codice:
    char gameZone[ MAXLINE ][ MAXCOLUMN ] = { 0 }; /* Questo è il campo di gioco */
    il vettore è bidimensionale, cosa volevi fare qui? Perché o fai
    codice:
    char gameZone[ MAXLINE ][ MAXCOLUMN ] = { {0} }; /* Questo è il campo di gioco */
    e inizializzi la cella [0],[0] con 0;
    Se vuoi semplicemente dichiarare il vettore allora

    codice:
    char gameZone[ MAXLINE ][ MAXCOLUMN ]; /* Questo è il campo di gioco */
    ...

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    4
    Ok, allora adesso provo ad applicare le correzioni. Per il momento grazie mille dell'aiuto!

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    4
    Ciao, scusate se vi chiedo di nuovo aiuto ma mi serve ancora un aiuto per il programma xD
    La consegna del progetto richiede che sia possibile salvare o caricare una partita. Ora, io avevo supposto di dover utilizzare i file, ma sinceramente non saprei come fare....Esistono altri modi più veloci? O, se convengono i file, come faccio? P.S: se servono parti di codice chiedete, perchè così su due piedi non saprei quali parti in particolare potrebbero servirvi....Grazie dell'aiuto

  5. #5
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Devi per forza usare i file...
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  6. #6
    Utente bannato
    Registrato dal
    Apr 2012
    Messaggi
    510
    Originariamente inviato da gew15
    Ora, io avevo supposto di dover utilizzare i file, ma sinceramente non saprei come fare....
    Parti da questo tutorial.

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    4
    Eccomi di nuovo, scusate ma avrei bisogno di sapere se questa come funzione carica/salva potrebbe andare bene per memorizzare e poi ripresentare una schermate come può essere quella di Forza Quattro:
    codice:
    /* Funzione load */
    /* Carica una partita */
    void load( void )
    {
      int i,n;
      FILE* p;
      char vett[i];
      p=fopen("gameZone.txt","r");
      for(i=0;i<n;i++)
      fscanf(p,"%s\n",&vett[i]);
      fclose(p);
    }
    
    /* Funzione save */
    /* Salva una partita */
    void save( void )
    {
      int i,n;
      FILE* p;
      char vett[i];
      fopen("gameZone.txt","w");
      for(i=0;i<n;i++)
      fprintf(p,"%s\n", vett[i]);
      fclose(p);
    }
    Considerate che:
    -è un abbozzo e ci sono diverse (troppe xD) "incomprensioni" nella compilazione
    -la 'i' andrebbe sostituita con le dimensioni della matrice rappresentata(o almeno credo)

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 © 2024 vBulletin Solutions, Inc. All rights reserved.