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;
}
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;
}