Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h> /*dimenticato*/
#define MAX_STR 100+1
#define MAX_NOMEFILE 20+1
FILE *f_conti, *f_op;
typedef struct dati_s{
char num_conto[MAX_STR];
char cognome[MAX_STR];
char nome[MAX_STR];
float saldoi;
struct dati_s *next;
}dati;
dati *p_testa, *p_corr;
typedef struct movimenti_s{
int num;
char num_conto[MAX_STR];
char data [19+1];
float val;
float saldo;
struct movimenti_s *next;
}movimenti;
movimenti *p2_testa, *p2_corr;
/*prototipi*/
void inserisci1(dati **p_dati, char str1[], char str2[], char str3[], float tmp);
void inserisci2(movimenti **puntdati, char cod[], char data_ora[], float valore, int num);/*AGGIUNTO int num); l'ho lascaito aperto in caso dovessi passare altri parametri ma non ho più chiuso*/
void libera_mem(movimenti **puntdati); /*non ho fatto a tempo a scrivere il prototipo*/
void aggiornasaldo(dati **p1dati, movimenti **p2dati); /*FUNZIONE MANCANTE*/
/*MAIN*/
int main () /*dimenticato int*/
{
/*FILE IN*/
char nf1[MAX_NOMEFILE];
printf("Inserire nome file:\n");
scanf("%s",nf1);
f_conti=fopen(nf1,"r");
if(f_conti==NULL)
{
printf("ERRORE LETTURA FILE!!!");
return 0;
}
/*IMMAGAZZINO IN UNA LISTA*/
int n,i;
char s1[MAX_STR],s2[MAX_STR],s3[MAX_STR];
float temp;
fscanf(f_conti,"%d",&n);
p_testa=NULL;
for(i=0;(fscanf(f_conti, "%s%s%s%f", s1,s2,s3,&temp)!=EOF)&&(i<n);i++)
{
inserisci1(&p_testa,s1,s2,s3,temp);
}
fclose(f_conti);
/*MENU'*/
char carat[2], nf2[MAX_NOMEFILE];
int num_op, esci;/*mancava dichiarazione di esci*/
char cod[MAX_STR], dat[MAX_STR], n_conto[MAX_STR];/*mancava dichiarazione n_conto*/
float valore;
do
{
printf("Inserire il comando:\n");
scanf("%s",carat); /*uso la scanf al posto di getchar perchè non riesco a farla funzionare*/
switch(carat[0])
{
case 'i':
case 'I':
scanf("%s",nf2);
libera_mem(&p2_testa);
p2_testa=NULL;
f_op=fopen(nf2,"r");
if(f_op==NULL)
printf("ERR. APERTURA FILE");
while(fscanf(f_op,"%d%s%s%f",&num_op,cod,dat,&valore)!=EOF)
{
inserisci2(&p2_testa,cod,dat, valore, num_op);
}
fclose(f_op);
/*aggiorna saldo*/
aggiornasaldo(&p_testa,&p2_testa); /*questa funzione mancava*/
break;
case 'r':
case 'R':
p2_corr=p2_testa;
int negativo;
while(p2_corr!=NULL)
{
if((*p2_corr).saldo<0)
{
printf("\n%s%f%s",(*p2_corr).num_conto,(*p2_corr).saldo,(*p2_corr).data);
negativo=1;
}
else if(negativo==1)
{
printf("%s",(*p2_corr).data); /*data è una stringa non un float*/
}
}/*macava la parentesi di chiusura del while*/
break;
case 'v':
case 'V':
scanf("%s", n_conto);
p2_corr=p2_testa;
while(p2_corr!=NULL) /*avevo scritto p2_corr invece di p2_testa*/
{
if((*p2_corr).num_conto==n_conto) /*avevo scritto p2_corr invece di p2_testa*/
{
printf("%s%s%f",(*p2_corr).num_conto, (*p2_corr).data,(*p2_corr).val); /* GUARDA COSA STAMPARE SUL TESTO mancava*/
}
}
break;
case 't':
case 'T':
esci=1; /*da dichiarare*/
break;
default:
printf("ERRORE");
}
}while(esci!=1);
return 0; /* dimenticato 0*/
} /*END MAIN*/
/* FUNZIONI */
void inserisci1(dati **p_dati, char str1[], char str2[], char str3[], float tmp) /*non era completo*/
{
dati *puntcorr; /*mancava*/
puntcorr=(dati*)malloc(sizeof(dati));/*cambiato da p_corr a puntcorr*/
/*riempo i campi PARTE ASSENTE*/
strcpy((*puntcorr).num_conto,str1);
strcpy((*puntcorr).cognome,str2);
strcpy((*puntcorr).nome,str3);
(*puntcorr).saldoi=tmp;
(*puntcorr).next=*p_dati;
*p_dati=puntcorr;
return;
}
/*LE FUNZIONI SUCCESSIVE ERANO COMLPETAMENTE MANCANTI*/
void inserisci2(movimenti **p_dati, char cod[], char data_ora[], float valore, int num)
{
movimenti *puntcorr;
puntcorr=(movimenti*)malloc(sizeof(movimenti));
strcpy((*puntcorr).num_conto,cod);
strcpy((*puntcorr).data,data_ora);
(*puntcorr).val=valore;
(*puntcorr).num=num;
(*puntcorr).next=*p_dati;
*p_dati=puntcorr;
return;
}
void libera_mem(movimenti **puntdati)
{
movimenti *pcorr;
pcorr=*puntdati;
while(pcorr!=NULL)
{
free(pcorr);
}
return;
}
void aggiornasaldo(dati **p1dati, movimenti **p2dati)
{
dati *p1corr;
movimenti *p2corr;
p2corr=*p2dati;
while(p2corr!=NULL)
{
p1corr=*p1dati;
while(p1corr!=NULL)
{
if(strcmp((*p1corr).num_conto,(*p2corr).num_conto)==0)
{
(*p1corr).saldoi+=(*p2corr).val;
(*p2corr).saldo=(*p1corr).saldoi;
}
p1corr=(*p1corr).next;
}
p2corr=(*p2corr).next;
}
return;
}
The problem is that when I run the file it does evrything well as soon as I type the the first command when it exit the program without any error, it just skip evrything after the