Errori in un programma scritto in linguaggio c

di il
11 risposte

Errori in un programma scritto in linguaggio c

Ciao a tutti,
il mio prof di informatica mi ha assegnato un programma (il gioco snake) da programmare.
Ora, il corpo del programma c'è, solo che quando compilo mi risultano 3 errori:
1 In function `main':
2 undefined reference to `WinMain'
3 [Error] ld returned 1 exit status.
Mi sono resa conto che ci sono argomenti simili sul forum, ma ad essere sincera non ho capito molto bene come correggere gli errori che ho commesso nella stesura del programma.
Grazie in anticipo per l'aiuto e scusatemi se ho sbagliato qualcosa nel porre la domanda.
Questo è il programma:
/*
  SNAKE
*/
#include <stdio.h>//libreria che contiene funzioni di imput e di output
#include <stdlib.h>//libreria che contiene le funzioni system()
#include <conio.h>//libreria  utilizzata dai compilatori per MS-DOS per creare interfacce testuali
#include <windows.h> //è libreria che contiene le dichiarazioni in C/C++ per le funzioni delle Windows API(l'insieme delle interfacce di 
                                     programmazione disponibili nei sistemi operativi Windows 
 
#include <time.h>// libreria utilizzata per convertire tra vari formati di data e ora.
 
void gotoxy(short x, short y)//funzione che non restituisce output
{
COORD pos = {x, y};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);

void print(int LengthSnake);
 int T,i;
    int direzionex = -1;
    int direzioney = 0;
     int cambiodirX = 0;
    int cambiodirY = 0;
    char termina ;
    int Len = 8;
    int punti = 0;
     int cibo = 0;
     int ciboX;
    int ciboY;
     int record = 0;
     int scelta;
      int fp;
int snake[200][2];
/*
     _______
testa|0    |
     |1    |
     |2    |
     |3    |
     |...  |
coda |Len-1|
 
la seconda dimensione di snake[][]
ha 2 celle perchè
la prima indica la posizione X
mentre la seconda la posizione Y
*/
 // PULISCE LA PARTE IN BASSO DELLO SCHERMO DESTINATO A SCRIVERE I PUNTI..
  void clean(int*x,int*y);
{
     int i;
     
     gotoxy(1, 23);
     for(i=1; i<=160; i++)
          putch(' ');
}
       int funzione(int n);
{
     // DICHIARAZIONI DELLE VARIABILI
     
     
     FILE *fp;
     
     fp = fopen("record", "r");
     if(fp != NULL)
     {
          fread(&record, 1, 1, fp);
          fclose(fp);
     }
     
     // SCELTA DELLA DIFFICOLTA'
     system("CLS");
     system ("COLOR 0f");//primo carattere sfondo, secondo testo
     gotoxy(30,3); puts("SNAKE BY PHAM (alias pnb2frank)");
     gotoxy(30,5); printf("IL TUO RECORD E': %d", record);
     gotoxy(30,7); puts("DIFFICOLTA'");
     gotoxy(30,9); puts("1) Super Facile");
     gotoxy(30,10); puts("2) Facile");
     gotoxy(30,11); puts("3) Medio");
     gotoxy(30,12); puts("4) Difficile");
     gotoxy(30,13); puts("5) Estremo");
     gotoxy(32,15); puts("Scelta: ");
     
     do scelta = getch(); while(scelta < 49 || scelta > 53);
     
     switch(scelta)
     {
          case 49:
               T=250;
               break;
          case 50:
               T=125;
               break;
          case 51:
               T=70;
               break;
          case 52:
               T=40;
               break;
          case 53:
               T=10;
               break;
     }
     system("CLS");}
     
     // INIZIALIZZAZIONE SNAKE
     for(i=0; i<200; i++)
     {
          snake[i][0] = 1;
          snake[i][1] = 1;
     }
     snake[0][0] = 40;
     snake[0][1] = 11;
     
     // DISEGNO QUADRO DEL GIOCO
     gotoxy(1, 22);
       system ("CLS");//pulisce lo schermo clear screen
  system ("COLOR 0c");//primo carattere sfondo, secondo testo
     for(i=1; i<=80; i++)
          putchar('=');
     
     // SCRIVO I PUNTI
      write();
     gotoxy(1, 23);
      system ("CLS");//pulisce lo schermo clear screen
  system ("COLOR 0f");//primo carattere sfondo, secondo testo 
     printf("PUNTI = %d \t RECORD = %d \n", punti, record);
     printf("Premi P per mettere in pausa, oppure e per ritornare al menu.");
    
	 scanf("%c",&termina);
	 
     
     // RANDOMIZZO PER IL CIBO
     srand(time(NULL));
     
     //__________________CICLO GENERALE, SI ESCE CON ESC____________________
     while(termina==0)
     {
          Sleep(T); // VELOCITA' (SCELTO DALL'UTENTE)
         
          // GENERO E DISEGNO IL CIBO
          if(cibo==0)
          {
               rigenera:
               ciboX = rand() % 80 + 1;
               ciboY = rand() % 21 + 1;
               
               for(i=0; i<Len; i++)
                    if(snake[i][0] == ciboX && snake[i][1] == ciboY)
                         goto rigenera;
               
                system ("CLS");//pulisce lo schermo clear screen
                system ("COLOR 0b");//primo carattere sfondo, secondo testo textcolor(BROWN);
               gotoxy(ciboX, ciboY);
               putchar('');
               cibo=1;
          }
         
          // GESTIONE DIREZIONE DEL SERPENTE
          if(kbhit())
          {
               switch(getch())
               {
                    case 'w':
                    case 'W':
                         cambiodirX = 0;
                         cambiodirY = -1;
                         break;
                    case 'a':
                    case 'A':
                         cambiodirX = -1;
                         cambiodirY = 0;
                         break;
                    case 's':
                    case 'S':
                         cambiodirX = 0;
                         cambiodirY = 1;
                         break;
                    case 'd':
                    case 'D':
                         cambiodirX = 1;
                         cambiodirY = 0;
                         break;
                    case 'p':
                    case 'P':
                        
                         
                           system ("CLS");//pulisce lo schermo clear screen
                          system ("COLOR 0f");//primo carattere sfondo, secondo testo
                        gotoxy(1, 23);
						 system("PAUSE");
                          system ("CLS");//pulisce lo schermo clear screen
                          system ("COLOR 0f");//primo carattere sfondo, secondo testo
                         break;
                    case 27:
                         termina = 1;
               }
               // CONTROLLO SE IL CAMBIO DELLA DIREZIONE E' NEL SENSO OPPOSTO DELL'ATTUALE DIREZIONE
               // SE SI, NON CAMBIA DIREZIONE..
               if((cambiodirX) != -(direzionex) && (cambiodirY) != -(direzioney))
               {
                    direzionex = cambiodirX;
                    direzioney = cambiodirY;
               }
          }
         
          // SHIFT DEL SERPENTE
          for(i=Len-1; i>0; i--)
          {
               snake[i][0]=snake[i-1][0];
               snake[i][1]=snake[i-1][1];
          }
          // SPOSTAMENTO DELLA TESTA DEL SERPENTE
          // controlla se si trova nei limiti dello schermo
          if(snake[0][0] + direzionex == 81)
               snake[0][0] = 1;
               
          else if(snake[0][0] + direzionex == 0)
               snake[0][0] = 80;
               
          else if(snake[0][1] + direzioney == 22)
               snake[0][1] = 1;
               
          else if(snake[0][1] + direzioney == 0)
               snake[0][1] = 21;
               
          // se non si trova nei limiti..
          else
          {
               snake[0][0]+=direzionex;
               snake[0][1]+=direzioney;
          }
         
          // CONTROLLO SE IL SERPENTE MANGIA PARTE DEL CORPO
          for(i=1; i<Len; i++)
          {
               if(snake[0][0] == snake[i][0] &&
                  snake[0][1] == snake[i][1])
               {
                    
                   
                     system ("CLS");//pulisce lo schermo clear screen
                     system ("COLOR 0f");//primo carattere sfondo, secondo testo 
					 gotoxy(1, 23);
                    printf("HAI PERSO!! PUNTEGGIO: %d \n", punti);
                    
                    
                    termina = 1;
               }
          }
           
          // STAMPA DELLA TESTA
          gotoxy(snake[0][0], snake[0][1]);
         system ("CLS");//pulisce lo schermo clear screen
         system ("COLOR 0a");//primo carattere sfondo, secondo testo
          putchar('\376');
         
          // CANCELLO LA CODA
          gotoxy(snake[Len-1][0], snake[Len-1][1]);
          putchar(' ');
         
          // INCREMEMTO DEL SERPENTE SE MANGIA CIBO
          if(snake[0][0] == ciboX && snake[0][1] == ciboY)
          {
               Len+=5;
               punti++;
               cibo=0;
               system("CLS");
               gotoxy(1, 23);
                system ("CLS");//pulisce lo schermo clear screen
                system ("COLOR 0f");//primo carattere sfondo, secondo testo 
               printf("PUNTI = %d \t RECORD = %d \a\n", punti, record);
               printf("Premi P per mettere in pausa. ESC per ritornare al menu.");
          }
     }
 
     
    
	 
    
     
     ;
     system("PAUSE");
 }

11 Risposte

  • Re: Errori in un programma scritto in linguaggio c

    Ci sono un bel po' di errori ...

    Tanto per cominciare, dove sta la funzione main?

    E poi com'è che alcune funzioni cominciano ma non si sa dove finiscono?

    Per ultimo, hai utilizzato un progetto di tipo "Console"?
  • Re: Errori in un programma scritto in linguaggio c

    La funzione main devo averla cancellata con l'ultima modifica (scusami ma non ne me ero accorta).
    Comunque starebbe prima della funzione system("PAUSE") dell'ultima riga.
    Non ho utilizzato un progetto bensì un file sorgente perchè il mio professore non vuole vedere dei programmi scritti su dei progetti.
    E per le funzioni adesso ne creo di più "piccole".
  • Re: Errori in un programma scritto in linguaggio c

    Quello che dice il tuo professore non è importante ... Dipende da quali strumenti usi per scrivere il codice / compilarlo, è necessario creare un progetto di tipo Console. Al limite dicci cosa usi e si vede meglio ...

    Per il resto, riproponi in un altro post il codice corretto ... non si può discutere su "starebbe" ...
  • Re: Errori in un programma scritto in linguaggio c

    Come compilatore utilizzo Dev-c++.
    Il programma ora è scritto in un progetto di tipo console.
    Ecco il codice corretto della funzione main:
     *
     /* SNAKE
    */
    #include <stdio.h>//libreria che contiene funzioni di imput e di output
    #include <stdlib.h>//libreria che contiene le funzioni system()
    #include <conio.h>//libreria  utilizzata dai compilatori per MS-DOS per creare interfacce testuali
    #include <windows.h> //è libreria che contiene le dichiarazioni in C/C++ per le funzioni delle Windows API(l'insieme delle interfacce di programmazione disponibili nei sistemi operativi Windows 
     
    #include <time.h>// libreria utilizzata per convertire tra vari formati di data e ora.
     //definisce gotoxy() per i compilatori ANSI C 
     
     
     void print(int LengthSnake);
     int T,i;
        int direzionex = -1;
        int direzioney = 0;
         int cambiodirX = 0;
        int cambiodirY = 0;
        char termina ;
        int Len = 8;
        int punti = 0;
         int cibo = 0;
         int ciboX;
        int ciboY;
         int record = 0;
         int scelta;
          int fp;
    int snake[200][2];
    /*
         _______
    testa|0    |
         |1    |
         |2    |
         |3    |
         |...  |
    coda |Len-1|
     
    la seconda dimensione di snake[][]
    ha 2 celle perchè
    la prima indica la posizione X
    mentre la seconda la posizione Y
    */
     // PULISCE LA PARTE IN BASSO DELLO SCHERMO DESTINATO A SCRIVERE I PUNTI..
     
      main ();
     {system("CLS");
     system("COLOR 0a");
     clean();
    {
         int i;
         
         gotoxy(1, 23);
         for(i=1; i<=160; i++)
              putch(' ');
    };
    
    funzione(); 
     snake_inizializzazione();
    quadrato() ;
    punteggio();
    generazione_cibo(); 
    direzione(); 
    condizioni_snake() ;
     testa_coda();
     mangia();
     system("PAUSE");
     }
    
    

    Mentre questo è quello delle funzioni che ho creato:
     void gotoxy(short x, short y)//funzione che non restituisce output
    {
    COORD pos = {x, y};
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
    
    int funzione(int n);
    {// DICHIARAZIONI DELLE VARIABILI
         
         
         FILE *fp;
         
         fp = fopen("record", "r");
         if(fp != NULL)
         {
              fread(&record, 1, 1, fp);
              fclose(fp);
         };
         
         
         // SCELTA DELLA DIFFICOLTA'
         system("CLS");
         system ("COLOR 0f");//primo carattere sfondo, secondo testo
         gotoxy(30,3); puts("SNAKE BY PHAM (alias pnb2frank)");
         gotoxy(30,5); printf("IL TUO RECORD E': %d", record);
         gotoxy(30,7); puts("DIFFICOLTA'");
         gotoxy(30,9); puts("1) Super Facile");
         gotoxy(30,10); puts("2) Facile");
         gotoxy(30,11); puts("3) Medio");
         gotoxy(30,12); puts("4) Difficile");
         gotoxy(30,13); puts("5) Estremo");
         gotoxy(32,15); puts("Scelta: ");
         
         do scelta = getch(); while(scelta < 49 || scelta > 53);
         
         switch(scelta)
         {
              case 49:
                   T=250;
                   break;
              case 50:
                   T=125;
                   break;
              case 51:
                   T=70;
                   break;
              case 52:
                   T=40;
                   break;
              case 53:
                   T=10;
                   break;
         }
         system("CLS");};
         
         
         snake_inizializzazione(); //inizializzazione snake
    {
    for(i=0; i<200; i++)
         {
              snake[i][0] = 1;
              snake[i][1] = 1;
         }
         snake[0][0] = 40;
         snake[0][1] = 11;
    	 };
    	 
    	 {
    	 gotoxy(1, 22);
           system ("CLS");//pulisce lo schermo clear screen
      system ("COLOR 0c");//primo carattere sfondo, secondo testo
         for(i=1; i<=80; i++)
           putchar('=');
    	   
    	   };
    	   
    	   punteggio();
    {
    
          write();
         gotoxy(1, 23);
          system ("CLS");//pulisce lo schermo clear screen
      system ("COLOR 0f");//primo carattere sfondo, secondo testo 
         printf("PUNTI = %d \t RECORD = %d \n", punti, record);
         printf("Premi P per mettere in pausa, oppure e per ritornare al menu.");
        
    	 scanf("%c",&termina);
    };
    
      generazione_cibo();
    	 {     if(cibo==0)
              {
                   rigenera:
                   ciboX = rand() % 80 + 1;
                   ciboY = rand() % 21 + 1;
                   
                   for(i=0; i<Len; i++)
                        if(snake[i][0] == ciboX && snake[i][1] == ciboY)
                             goto rigenera;
                   
                    system ("CLS");//pulisce lo schermo clear screen
                    system ("COLOR 0b");//primo carattere sfondo, secondo testo textcolor(BROWN);
                   gotoxy(ciboX, ciboY);
                   putchar('');
                   cibo=1;
              }
          };
          
          // GESTIONE DIREZIONE DEL SERPENTE
             direzione();
    		 {
    		  if(kbhit())
              {
                   switch(getch())
                   {
                        case 'w':
                        case 'W':
                             cambiodirX = 0;
                             cambiodirY = -1;
                             break;
                        case 'a':
                        case 'A':
                             cambiodirX = -1;
                             cambiodirY = 0;
                             break;
                        case 's':
                        case 'S':
                             cambiodirX = 0;
                             cambiodirY = 1;
                             break;
                        case 'd':
                        case 'D':
                             cambiodirX = 1;
                             cambiodirY = 0;
                             break;
                        case 'p':
                        case 'P':
                             clean();
                             gotoxy(1, 23);
                               system ("CLS");//pulisce lo schermo clear screen
                              system ("COLOR 0f");//primo carattere sfondo, secondo testo
                             system("PAUSE");
                             clean();
                             break;
                        case 27:
                             termina = 1;
                   }
                   // CONTROLLO SE IL CAMBIO DELLA DIREZIONE E' NEL SENSO OPPOSTO DELL'ATTUALE DIREZIONE
                   // SE SI, NON CAMBIA DIREZIONE..
                   if((cambiodirX) != -(direzionex) && (cambiodirY) != -(direzioney))
                   {
                        direzionex = cambiodirX;
                        direzioney = cambiodirY;
                   }
                   
            };
            
            condizioni_snake();
    {// SHIFT DEL SERPENTE
              for(i=Len-1; i>0; i--)
              {
                   snake[i][0]=snake[i-1][0];
                   snake[i][1]=snake[i-1][1];
              }
              // SPOSTAMENTO DELLA TESTA DEL SERPENTE
              // controlla se si trova nei limiti dello schermo
              if(snake[0][0] + direzionex == 81)
                   snake[0][0] = 1;
                   
              else if(snake[0][0] + direzionex == 0)
                   snake[0][0] = 80;
                   
              else if(snake[0][1] + direzioney == 22)
                   snake[0][1] = 1;
                   
              else if(snake[0][1] + direzioney == 0)
                   snake[0][1] = 21;
                   
              // se non si trova nei limiti..
              else
              {
                   snake[0][0]+=direzionex;
                   snake[0][1]+=direzioney;
              }
             
              // CONTROLLO SE IL SERPENTE MANGIA PARTE DEL CORPO
              for(i=1; i<Len; i++)
              {
                   if(snake[0][0] == snake[i][0] &&
                      snake[0][1] == snake[i][1])
                   {
                        clean();
                        gotoxy(1, 23);
                         system ("CLS");//pulisce lo schermo clear screen
                         system ("COLOR 0f");//primo carattere sfondo, secondo testo
                        printf("HAI PERSO!! PUNTEGGIO: %d \n", punti);
                        
                        
                        termina = 1;
                   }
              }
              
        };
        
        testa_coda();
    	 {
    	     /* STAMPA DELLA TESTA*/
    		  gotoxy(snake[0][0], snake[0][1]);
             system ("CLS");//pulisce lo schermo clear screen
             system ("COLOR 0a");//primo carattere sfondo, secondo testo
              putchar('\376');
             
              /* CANCELLO LA CODA*/
              gotoxy(snake[Len-1][0], snake[Len-1][1]);
              putchar(' ');
             };
             
            mangia(); {
    
              if(snake[0][0] == ciboX && snake[0][1] == ciboY)
              {
                   Len+=5;
                   punti++;
                   cibo=0;
                   clean();
                   gotoxy(1, 23);
                    system ("CLS");//pulisce lo schermo clear screen
                    system ("COLOR 0f");//primo carattere sfondo, secondo testo 
                   printf("PUNTI = %d \t RECORD = %d \a\n", punti, record);
                   printf("Premi P per mettere in pausa. ESC per ritornare al menu.");
              }
    		  
    		  };
  • Re: Errori in un programma scritto in linguaggio c

    Le funzioni non le scrivi con il ; alla fine ... la main ad esempio

    inzia
    
    int  main ()
    {
    
    e finisce
    
      return 0;
    }
    
  • Re: Errori in un programma scritto in linguaggio c

    Lo so che dopo le funzioni non bisogna mettere il ";" ma se non lo metto mi dava errata l'intera riga e diceva:"[Error] expected `;' before ')' token".
    Però crede che sia un problema dovuto al compilatore che ho usato, perché ho appena usato lo stesso programma con la giusta dicitura su un altro computer e funziona.
  • Re: Errori in un programma scritto in linguaggio c

    No ... non può funzionare come l'avevi scritto ... in nessun computer.
  • Re: Errori in un programma scritto in linguaggio c

    Lo so però se scrivo main();{istruzioni} non mi da nessun errore; altrimenti me li segna tutti e come errore dice" [Error] expected ';' before '{' token".
    Comunque è ricomparso l'errore per tutte le funzioni(main compreso).
  • Re: Errori in un programma scritto in linguaggio c

    Rivedi il codice ...

    La funzione print dove sta?
  • Re: Errori in un programma scritto in linguaggio c

    Ho ricontrollato il codice, aggiungendo la funzione print.
    Il compilatore è pieno di bug , perché ieri sera mi compilava benissimo il programma mentre stamattina no(Ho controllato le directory ma sono esatte); quindi credo che sia per questo che mi dava errata l'esatta dicitura del codice.
    Oggi chiedo a un mio compagno se me lo può compilare lui.

    Correzione codice main
    
    main ()
     {system("CLS");
     system("COLOR 0a");
     clean();
    {
         int i;
         
         gotoxy(1, 23);
         for(i=1; i<=160; i++)
              putch(' ');
    };
    print(int LengthSnake);
    funzione(); 
    snake_inizializzazione();
    quadrato() ;
    punteggio();
    generazione_cibo(); 
    direzione(); 
    condizioni_snake() ;
     testa_coda();
     mangia();
     return=0;
     system("PAUSE");
     }
  • Re: Errori in un programma scritto in linguaggio c

    Black_Moon ha scritto:


    ....Il compilatore è pieno di bug.....
Devi accedere o registrarti per scrivere nel forum
11 risposte