Ciao ho nuovamente un problema simile ma non capisco cosa sbaglio, spero potrai darmi una mano:
Il codice è il seguente, in alcuni pezzi del main ci sono righe non sintatticamente corrette come nel "case 1:" ma le ho scritte così per farmi una sequenza delle cose da fare.
Il problema che ho in questo caso è che non riesco attraverso la funzione crea_lista_cliente ad inserire giorno mese e anno , la riga di codice dove mi da segmentation fault è questa:
scanf("%d/%d/%d", &(nuovo_cliente->conto_cliente0.movimenti->data0.giorno), &(nuovo_cliente->conto_cliente0.movimenti->data0.mese), &(nuovo_cliente->conto_cliente0.movimenti->data0.anno) );
Grazie in anticipo
//07-03-2017
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define PULISCI fflush(stdin)
/** S T R U T T U R E D A T I **/
struct lista_movimenti
{
float importo_movimento;
int numerocc;
struct data
{
int giorno;
int mese;
int anno;
}data0;
struct lista_movimenti *prossimo_movimentoPtr;
};
struct cliente
{
char cognome[20];
char nome[20];
char cf[16];
char email[20];
int numero_conto;
char username[10];
char password[10];
struct cliente *prossimo_clientePtr; //Puntatore alla prossima struttura cliente
struct conto_cliente //Struttura contenente un saldo e un puntatore alla struttura dei movimenti
{
float saldo;
struct lista_movimenti *movimenti;
}conto_cliente0;
};
/** V A R I T Y P E D E F **/
typedef struct cliente Cliente;
typedef Cliente *ClientePtr;
typedef struct lista_movimenti ListaMovimenti;
typedef ListaMovimenti *ListaMovimentiPtr;
/** P R O T O T I P I D I F U N Z I O N E **/
void menu();
int login_impiegato(char user[], char password[]);
int login_impiegato1();
ClientePtr crea_lista_cliente();
void inserisci_nuovo_cliente(ClientePtr *testa);
/** M A I N **/
int main (void)
{
int scelta, scelta2;
char username_imp[10];
char password_imp[10];
ClientePtr head_clientePtr = NULL; //Crea un nuovo puntatore alla struttura cliente che inizialmente punta a NULL
do{
if (head_clientePtr == NULL)
{
scelta = 2;
}
else
{
menu();
printf("Fai una scelta: ");
fflush(stdin);
scanf("%d", &scelta);
}
switch (scelta)
{
case 1:
{/*
switch (scelta1)
{
case 1: login_cliente()
case 2: saldo()
case 3: bonifico()
case 4: listamovpers()
}*/
}
case 2:
{
int esito_login;
char scelta3;
if (head_clientePtr == NULL)
{
esito_login = login_impiegato1();
if (esito_login == 1) //Se è vera sei loggato
{
printf("Inserimento dei NUOVI CLIENTI\n");
head_clientePtr = crea_lista_cliente();
do
{
printf("Vuoi inserire altri clienti? S o N: ");
PULISCI;
scanf("%c", &scelta3);
if (scelta3 == 's' || scelta3 == 'S')
{
printf("Inserimento di un nuovo cliente:\n");
inserisci_nuovo_cliente(&head_clientePtr);
}
}
while (scelta3 == 's' || scelta3 == 'S');
}
}
else
{
fflush(stdin);
esito_login = login_impiegato1();
if (esito_login == 1)
//sotto_menu();
printf("Fai una scelta: ");
fflush(stdin);
scanf("%d", &scelta2);
switch (scelta2)
{
/*
case 1: saldo()
case 2: listamov1()
case 3: listamovAll()
case 4: salva()*/
}
}
}
break;
}
}
while (scelta != 3);
system("pause");
return 0;
}
void menu()
{
printf("\t\t******************* Benvenuto nella BANCA, che operazione intendi eseguire? ********************\n");
printf("\t\t* -1) Login come CLIENTE della banca *\n");
printf("\t\t* -2) Login come IMPIEGATO della banca *\n");
printf("\t\t************************************************************************************************\n");
};
int login_impiegato(char user[], char password[])
{
char us[] = "user";
char pw[] = "user";
int esito_user;
int esito_password;
esito_user = strcmp(user, us);
esito_password = strcmp(password, pw);
if (esito_user == 0 && esito_password == 0)
{
return 1;
}
else
{
return 0;
}
}
int login_impiegato1()
{
int stato_login;
char username_imp[10];
char password_imp[10];
int n = 10;
puts("Inserire Username impiegato: ");
gets(username_imp);
puts("Inserire Password impiegato: ");
gets(password_imp);
stato_login = login_impiegato(username_imp, password_imp);
if (stato_login == 1)
{
printf("Credenziali accettate\n");
return 1;
}
else
{
printf("Credenziali errate\n");
return 0;
}
};
ClientePtr crea_lista_cliente()
{
ClientePtr nuovo_cliente = malloc(sizeof(Cliente));
printf("Inserisci il Nome del nuovo cliente: ");
PULISCI;
scanf("%20s", nuovo_cliente->nome);
printf("Inserisci il Cognome del nuovo cliente: ");
PULISCI;
scanf("%20s", nuovo_cliente->cognome);
printf("Inserisci il C.F del nuovo cliente: ");
PULISCI;
scanf("%16s", nuovo_cliente->cf);
int trovato;
do {
printf("Inserisci Indirizzo E-Mail del nuovo cliente: ");
PULISCI;
scanf("%20s", nuovo_cliente->email);
char *mail = nuovo_cliente->email;
int i;
for (i = 0; i<20; i++)
{
if (mail[i] == '@')
{
trovato = 1;
break;
}
else
trovato = 0;
}
}
while(!trovato);
printf("Inserisci Numero Conto del nuovo cliente: ");
PULISCI;
scanf("%10d", &(nuovo_cliente->numero_conto));
printf("Inserisci Username del nuovo cliente: ");
PULISCI;
scanf("%10s", nuovo_cliente->username);
printf("Inserici Password del nuovo cliente: ");
PULISCI;
scanf("%10s", nuovo_cliente->password);
PULISCI;
printf("Inserisci Saldo del nuovo cliente: ");
scanf("%f", &(nuovo_cliente->conto_cliente0.saldo));
PULISCI;
printf("Inserisci Data operazione in formato (gg/mm/aaaa): ");
scanf("%d/%d/%d", &(nuovo_cliente->conto_cliente0.movimenti->data0.giorno), &(nuovo_cliente->conto_cliente0.movimenti->data0.mese), &(nuovo_cliente->conto_cliente0.movimenti->data0.anno) );
nuovo_cliente->prossimo_clientePtr = NULL;
return nuovo_cliente;
};
void inserisci_nuovo_cliente(ClientePtr *testa)
{
ClientePtr nuovo_cliente = malloc(sizeof(Cliente));
printf("Inserisci il Nome del nuovo cliente: ");
PULISCI;
scanf("%20s", nuovo_cliente->nome);
printf("Inserisci il Cognome del nuovo cliente: ");
PULISCI;
scanf("%20s", nuovo_cliente->cognome);
printf("Inserisci il C.F del nuovo cliente: ");
PULISCI;
scanf("%16s", nuovo_cliente->cf);
printf("Inserisci Indirizzo E-Mail del nuovo cliente: ");
PULISCI;
scanf("%20s", nuovo_cliente->email);
printf("Inserisci Numero Conto del nuovo cliente: ");
PULISCI;
scanf("%10d", nuovo_cliente->numero_conto);
printf("Inserisci Username del nuovo cliente: ");
PULISCI;
scanf("%10s", nuovo_cliente->username);
printf("Inserici Password del nuovo cliente: ");
PULISCI;
scanf("%10s", nuovo_cliente->password);
nuovo_cliente->prossimo_clientePtr = *testa;
*testa = nuovo_cliente;
};