PDA

Visualizza versione completa : [c] expected declaration or statement at end of input


braian
27-06-2007, 00.39.24
quando compilo questo codice mi da l' errore "expected declaration or statement at end of input" relati vo alla linea dell' ultima parentesi graffa chiusa.
Qualcuno sa perch??? un progetto che devo consegnare a brevissimo


#include <getopt.h>
#include <string.h>
#include <ctype.h>
#include <errno.h>
#include <stdlib.h>
#include <mcheck.h>
#include <math.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#define BUF (100*(sizeof(char)))




signed char a,b,c;
char dati[BUF+1];
int j,uguaglianza,letti,fd,ciclinumeri,numerostringhe, senzaparametri;
int stringainizialepresente=0;
int i = 1;
int dollarocomecarattere=0;
char* stringa;
char* stringainiziale;
char* provvisoria;
char* provvisoria2={'\0'};
int terminale;
int terminaletrovato=0;
char carattere;


typedef struct strutt1
{
char* nomesimbolo;
struct struttura1* simbolo;
struct struttura2* sequenza;
}struttura1;

typedef struct strutt2
{
struct struttura2* altrisimboli;
struct struttura3* simbolireali;
}struttura2;

typedef struct strutt3
{
struct struttura3* altroreale;
char* nometerminale;
int terminale;
int opzionale;
}struttura3;





int main(int argc,char* argv[])
{

provvisoria=calloc(1,sizeof(char)*2);
if(provvisoria==NULL)
{
perror("errore in assegnazione di memoria calloc\n");
exit(errno);
}

while (i<argc)
{
c=*argv[i];
if(c=='-')
{
if(senzaparametri==1)
{
perror("inserita parametro o sequenza di parametri errata\n");
exit(errno);
}
a=*((argv[i])+sizeof(char));
if(isdigit(a)&&(i==1))
{
numerostringhe=strlen(argv[i]);
stringa=calloc(1,(sizeof(char))*numerostringhe-1);
if(stringa==NULL)
{
perror("errore in allocazione di memoria calloc\n");
exit(errno);
}
for(ciclinumeri=1;ciclinumeri<numerostringhe;ciclinumeri=ciclinumeri+1)
{
b=*((argv[i])+((sizeof(char))*ciclinumeri));
if (!isdigit(b))
{
perror("inserito numero con carattere non consentito\n");
exit(errno);
}
stringa[ciclinumeri-1]=b;
}
printf(stringa);//da togliere e inserire di prendere la sotosttringa dei numeri e salvarla su una variabile intera con atoi
}
else
{
if((a=='s')&&((i==1)||(i==2)))
{
if(argv[i+1]!=NULL)
{
stringainiziale=argv[i+1];
; stringainizialepresente=1;
i=i+1;
}
else
{
perror("manca il simbolo iniziale\n");
exit(errno);
}
}
else
{
perror("parametro sconosciuto\n");
exit(errno);
}
}
}
else
{
fd=open(argv[i],O_RDONLY);
if(fd == -1)
{
perror("errore aprendo il file\n");
exit(errno);
}
while((letti=read(fd,dati,BUF)>0))//magari aumetare un po' la dimenzione dei byte da leggere
{
if(letti==-1)
{
perror("errore in lettura\n");
exit(errno);
}
leggi(dati);


}
//quando arriva a 0 alla fine del file
senzaparametri=1;
}
i=i+1;
}

return 0;
}


int leggi(char* dati)
{
for(j=0;j<BUF;j=j+sizeof(char))
{
carattere=dati[j];
//gestione stringa iniziale
if((carattere=='$')&&(dollarocomecarattere==0))
{
dollarocomecarattere=1;
}

if((carattere=='=')&&(uguaglianza==2))
{
terminale=1;
provvisoria2="";
}
if((carattere==' ')||(dati[j]=='\n'))
{
if((terminale==0)&&(dollarocomecarattere==1)&&(terminaletrovato==0))
{
if(dollarocomecarattere==1)
{
if(stringainizialepresente==0)
{
if((strcmp(provvisoria2,""))!=0)
{
stringainiziale=provvisoria2;
}
else
{
perror("simbolo iniziale non identificabile\n");
exit(errno);
}
}
//inserisco in lista1 provvisoria2
dollarocomecarattere=0;
terminaletrovato=1;
provvisoria2="";
}
else
{
perror("mancanza del carattere $ all'inizio del simbolo\n");
exit(errno);
}
}
else if((terminale==1)&&(terminaletrovato==1))
{
if(strcmp(provvisoria2,"")==0)
{
j=j+1;
}
else
{
//inserisco in lista3
if(dollarocomecarattere==1)
{
//non un vero terminale
}
else
{
//lo
}
}
}
}
else
{
if((carattere==':')&&(terminaletrovato==1))
{
if(uguaglianza==0)
{
uguaglianza=1;
}
else if(uguaglianza==1)
{
uguaglianza=2;
}
else
{
uguaglianza=0;
}
}

provvisoria[0]=dati[j];
provvisoria[1]='\0';
strcat(provvisoria2,provvisoria);
}
return 1;
}

UG0_BOSS
27-06-2007, 00.50.41
C' una parentesi aperta senza essere chiusa nella funzione leggi... anche se non so dirti qual'... a questa tarda ora non riesco a fare tanti ragionamenti :D (comunque per te dovrebbe essere facile capire qual')

Dav82
27-06-2007, 00.54.37
A occhio e croce a riga 237 va chiusa la parentesi dell'else :) In pratica l vanno chiusi l'else e il for che inizia a riga 153, ma c' una sola parentesi di chiusura ;)