PDA

Visualizza la versione completa : [C] Problema con un errore


andreajk
16-02-2013, 11:44
Scrivendo un programma per la gestione di un officina, quindi mi doveva fare l'inserimento di u auto, la modifica dei dati, la ricerca per targa e la stampa di tutte le auto.
andando a compilarlo mi dava questi errori, che non riesco a capire:

In function `main':
syntax error at end of input

potreste darmi una mano nella correzione del codice???

vi posto il codice :



# include <stdio.h>
# include <stdlib.h>
# include <string.h>

struct veicolo
{
char *targa;
char *modello;
char *nomeP;
char *cognomeP;
char *intervento;
char *data;
int ingressi;
struct veicolo *next;
};


void inserimento(char *tar, char *mod, char *no, char *cog, char *inte, char *dat);
void cerca(char *tar);
void modifica(char *t);
void stampa_auto(char *tar);
void stampa();


struct veicolo *officina;
const int dimS=30;

main()
{
char risp='\0', targa[dimS], modello[dimS], nomeP[dimS], cognomeP[dimS], intervento[dimS], data[dimS];
int ingressi;

struct veicolo *v;

while (risp!='u'){
printf("***che operazione vuoi eseguire?***\n");
printf("i per inserire un nuovo veicolo\n");
printf("c per cercare un veicolo inserendo la targa\n");
printf("m per modificare i dati di un veicolo\n");
printf("p per la stampa\n");
printf("s per stampare un veicolo inserendo la targa\n");
printf("u per uscire\n");
scanf("%c",&risp);
fflush(stdin);
switch(risp){

case 'i' :
printf("inserire targa\n");
gets(targa);
fflush(stdin);
printf("inserire modello\n");
gets(modello);
fflush(stdin);
printf("inserire nome\n");
gets(nomeP);
fflush(stdin);
printf("inserire cognome\n");
gets(cognomeP);
fflush(stdin);
printf("inserire la riparazione\n");
gets(intervento);
fflush(stdin);
printf("Inserire la data \n");
gets(data);
fflush(stdin);
inserimento(targa,modello,nomeP,cognomeP,intervent o,data);
break;

case 'c' :
printf("Inserisci la targa:\n");
gets(targa);
fflush(stdin);
cerca(targa);
break;


case 'm':
printf("Inserisci la targa del veicolo da modificare:\n");
gets(targa);
fflush(stdin);
modifica(targa);
break;


case 'p' :
stampa();
break;


case 's':
printf("Inserisci la targa del veicolo da stampare:\n");
gets(targa);
fflush(stdin);
stampa_auto(targa);
break;

case 'u' :
break;

default:
printf("Scelta errata.\n");
break;


}
system("PAUSE");
}



void inserimento(char *t,char *mod,char *n,char *cog, int c,char *inte, char *dat)
{
struct veicolo *v,*curr, *prev;
int ingresso =1;
v=malloc(sizeof(struct veicolo));
v->targa=malloc((strlen(t)+1)*sizeof(char));
strcpy(v->targa,t);
v->modello=malloc((strlen(mod)+1)*sizeof(char));
strcpy(v->modello,mod);
v->nomeP=malloc((strlen(n)+1)*sizeof(char));
strcpy(v->nomeP,n);
v->cognomeP=malloc((strlen(cog)+1)*sizeof(char));
strcpy(v->cognomeP, cog);
v->intervento=malloc((strlen(inte)+1)*sizeof(char));
strcpy(v->intervento,inte);
v->data=malloc((strlen(dat)+1)*sizeof(char));
strcpy(v->data, dat);
v->ingressi=ingresso;
v->next=NULL;

prev=NULL;
curr=officina;

if (!officina || strcmp(curr->targa,t)>=0){
v->next=officina;
officina=v;
}
else{
while (curr && strcmp(curr->targa,t)<0){
prev=curr;
curr=curr->next;
}
prev->next=v;
v->next=curr;
}
}


void modifica(char *t){
struct veicolo *v;
char risp,temp[dimS], temp2[dimS];
int cil;

v=officina;

while(v && strcmp(v->targa,t)!=0)
v=v->next;

if(v){
printf("che dato vuoi modificare?\n");
printf("0 targa\n");
printf("1 tipo\n");
printf("2 nome\n");
printf("3 cilindrata\n");
printf("4 riparazione\n");
scanf("%c",&risp);
fflush(stdin);
switch (risp){
case '0':
printf("inserire nuova targa\n");
gets(temp);
fflush(stdin);
strcpy(v->targa,temp);
break;
case '1':
printf("inserire nuovo modello\n");
gets(temp);
fflush(stdin);
strcpy(v->modello,temp);
break;
case '2':
printf("inserire nuovo nome\n");
gets(temp);
fflush(stdin);
printf("inserire cognome\n");
gets(temp2);
fflush(stdin);
strcpy(v->nomeP,temp);
strcpy(v->cognomeP, temp2);
break;
case '3':
printf("inserire nuova cilindrata\n");
scanf("%d",&cil);
fflush(stdin);
break;
case '4':
printf("inserire nuova intervento\n");
gets(temp);
fflush(stdin);
strcat(v->intervento,temp);
v->ingressi++;
break;
default:
printf("scelta errata,riselezionare\n");
break;
}
}
else
printf("veicolo non trovato\n");
}



void cerca(char *t)
{
struct veicolo *v;
v=officina;

while(v)
{
if(strcmp(v->targa, t)==0)
{
printf("L'auto cercata e' stata riparata nell'officina.\n");
return;
}
else
printf("Auto non presente nell'archivio.\n");
v=v->next;

}
if(!v)
printf("Auto non presente.\n");
return;


}


void stampa(){
struct veicolo *v;
v=officina;

while (v){
printf("Targa veicolo: %s\n", v->targa);
printf("modello: %s\n", v->modello);
printf("nome proprietario: %s\n", v->nomeP);
printf("cognome proprietario: %s\n", v->cognomeP);
printf("intervento effettuato: %s\n", v->intervento);
printf("data : %s\n", v->data);
printf("numero di interventi: %d\n", v->ingressi);
v=v->next;
}
return;
}

void stampa_auto(char *t)
{
struct veicolo *v;

v=officina;

if(strcmp(v->targa, t)==0)
{
printf("Targa veicolo: %s\n", v->targa);
printf("modello: %s\n", v->modello);
printf("nome proprietario: %s\n", v->nomeP);
printf("cognome proprietario: %s\n", v->cognomeP);
printf("intervento effettuato: %s\n", v->intervento);
printf("data : %s\n", v->data);
printf("numero di interventi: %d\n", v->ingressi);

}
else
printf("Auto non trovata.\n");

}

Mauri94
16-02-2013, 13:04
system("PAUSE");
// Valore di ritorno
}

Hai dimenticato il valore di ritorno della funzione main().

torn24
16-02-2013, 13:11
Manca la parentesi graffa di chiusura del main()

nella funzione inserimento hai un parametro di troppo

void inserimento(char *t,char *mod,char *n,char *cog, int c,char *inte, char *dat)

TOGLI int c che sembra che non usi , dovrebbe funzionare con queste correzioni !

andreajk
16-02-2013, 14:49
grazie per i consigli.......adesso funziona, grazie ragazzi

MItaly
16-02-2013, 15:52
Ahem... (http://forum.html.it/forum/showthread.php?s=&postid=13800028#post13800028) :madai!?:

Loading