Ciao a tutti, sto cercando di fare un piccolo sw dove in maniera randomica genero un po di dati e poi vorrei fare con una funzione quella di stampare a video gli individui che ho generato...ho provato ma non riesco a farlo stampare....questo qui e il codice
[/code
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <ctype.h>
#define N 5
typedef struct {
int giorno;
int mese;
int anno;
} data ;
typedef struct {
int giorno;
int mese;
int anno;
} data1 ;
typedef struct {
int id;
char nome_utente[50];
char nome[50+1]; // account NOME
char cognome[50+1]; // account first name
int sesso;
data datanascita;
data1 data_iscrizione;
char password[10+1];
char email[60+1];
}utente;
typedef enum {false, true} bool;
// prototypes
void insert(FILE *pf); //prototipo funzione
void print(FILE *pf); //prototipo funzione
int main(void)
{
setbuf(stdout,NULL);
setbuf(stdout,NULL);
utente account;
FILE *cfPtr; // studenti.dat file pointer
// fopen opens the file; exits if file cannot be opened
if ((cfPtr = fopen("studenti.txt", "rb")) == NULL) {
puts("File could not be opened.");
}
else {
unsigned int choice; // user's choice
// enable user to specify action
char strScelta[2];
char sceltaSicurezza[2];
int scelta = 0;
int sottosceltaint = 0;
bool esci = false; //true se l'utente sceglie opzione 0 per uscire dal programma
bool valore_trovato = true;
bool esci_aggiornamento_voto = false;
while(!esci){
printf("\n");
printf("1) gestione utenti DATI\n");
printf("2) ____\n");
printf("3)____\n");
printf("4) ____\n");
printf("5) ____\n");
printf("Opzione desiderata: ");
scanf("%s", strScelta);
while (strcmp(strScelta,"1") && strcmp(strScelta,"2") && strcmp(strScelta,"3") && strcmp(strScelta,"4") && strcmp(strScelta,"5")){
printf("Hai effettuato una scelta errata\n ");
printf("Effettua una scelta: ");
scanf("%s", strScelta);
//ripete fin quando l'utente non inserisce una scelta valida
}
while (strcmp(strScelta,"1") && strcmp(strScelta,"2")){
printf("Attenzione! hai inserito una scelta non valita\n ");
printf("Opzione desiderata: ");
scanf("%s", strScelta);
}
//conversione scelta in int
scelta = (int) strtol(strScelta,(char **)NULL,0);
switch(scelta){
case 1:
printf("CARICAMENTO DATI\n");
printf("1) generazione dati\n");
printf("2) visualizzazione dati\n");
printf("Effettua una scelta: ");
scanf("%s", strScelta);
while (strcmp(strScelta,"1") && strcmp(strScelta,"2")){
printf("Hai effettuato una scelta errata\n ");
printf("Effettua una scelta: ");
scanf("%s", strScelta);
}
//ripete fin quando l'utente non inserisce una scelta valida
if(strcmp(strScelta,"1") == 0){
insert(cfPtr);
printf("\n");
} else if(strcmp(strScelta,"2") == 0){
print(cfPtr);
printf("\n");
}
scelta = (int) strtol(strScelta,(char **)NULL,0);
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
printf("\ncaso0\n");
esci = true;
break;
}
}
fclose(cfPtr); // fclose closes the file
}
}
void insert(FILE *pfile){
setvbuf(stdout, NULL, _IONBF, 0);
FILE *fp;
int i;
utente account[N];
if((fp=fopen("utenti.txt", "wb"))==NULL) {
printf("Errore nell'apertura del file'");
exit(1);
}
int indice=0;
int seed = (time(NULL));
srand(seed);
// randomizzo nomi, cognomi, indirizzo e email
char* nomi [] = {"ALESSANDRO", "GIACOMO", "ALESSIO", "ANTONIO", "CARLO", "FABIO",
"ALESSANDRA", "GIACOMA","ALESSIA", "ANTONIA", "CARLA", "FABIA"};
char* cognomi [] = {"ROSSI", "BIANCHI", "NEGRO", "RIZZI", "CAMPESE", "IODICE",
"ROSSIA", "BIANCHIA", "NEGROA", "RIZZIA", "CAMPESEA", "IODICEA"};
char* simboli [] = {".", "_"};
char* email[] = {"@gmail.com", "@gmail.it", "@hotmail.it", "@hotmail.it", "@aruba.it", "@aruba.com", "@libero.it"};
// RANDOM NOMI
for(i=0;i<N;i++) {
//determino il codice univovo <-- DA CAMBIARE
account[i].id = i+1;
//determino in nome radom
indice = 0;
indice = rand () % 12;
strcpy(account[i].nome, nomi[indice]);
int indice_sesso= indice+1;
/*if (indice_sesso > 6){
account[i].sesso = 0;
}else
account[i].sesso = 1;*/
//determino il cognome random
indice = 0;
indice = rand () % 12;
strcpy(account[i].cognome, cognomi[indice]);
//determino il sesso delle persone
// data nascita
char stringa_mese[2];
account[i].datanascita.anno = rand()% (40) + 1969;
// Mese nascita
account[i].datanascita.mese = rand () % (12 - 1) + 1;
itoa (account[i].datanascita.mese, stringa_mese, 10);
// Giorno nascita
if (account[i].datanascita.mese==2 && account[i].datanascita.anno%400==0 || (account[i].datanascita.anno%4==0 &&!(account[i].datanascita.anno%100==0))){
account[i].datanascita.giorno = rand () % (29 - 01) + 01;
}
else if (account[i].datanascita.mese==2){
account[i].datanascita.giorno = rand () % (28 - 01) + 01;
}
else if (account[i].datanascita.mese==1 || account[i].datanascita.mese==3 || account[i].datanascita.mese==5 || account[i].datanascita.mese==7 || account[i].datanascita.mese==8 || account[i].datanascita.mese==10){
account[i].datanascita.giorno = rand () % (31 - 01) + 01;
}
else {
account[i].datanascita.giorno = rand () % (30 - 01) + 01;
}
// generazione nome utente
char string[50] = {""};
char string1[4+1] = {""};
int anno = account[i].datanascita.anno;
itoa (anno, string1, 10);
strcpy(string, account[i].nome); // copio il nome
indice = 0;
strcat(string, "_");
strcat(string, account[i].cognome); // concateno il cognome
strcat(string, ".");
strcat(string, string1);
// data iscrizione
// char stringa_mese[2];
account[i].data_iscrizione.anno = rand()% (15) + 2005;
// Mese nascita
account[i].data_iscrizione.mese = rand () % (12 - 1) + 1;
itoa (account[i].data_iscrizione.mese, stringa_mese, 10);
// Giorno nascita
if (account[i].data_iscrizione.mese==2 && account[i].data_iscrizione.anno%400==0 || (account[i].data_iscrizione.anno%4==0 &&!(account[i].data_iscrizione.anno%100==0))){
account[i].data_iscrizione.giorno = rand () % (29 - 01) + 01;
}
else if (account[i].data_iscrizione.mese==2){
account[i].data_iscrizione.giorno = rand () % (28 - 01) + 01;
}
else if (account[i].data_iscrizione.mese==1 || account[i].data_iscrizione.mese==3 || account[i].data_iscrizione.mese==5 || account[i].data_iscrizione.mese==7 || account[i].data_iscrizione.mese==8 || account[i].data_iscrizione.mese==10){
account[i].data_iscrizione.giorno = rand () % (31 - 01) + 01;
}
else {
account[i].data_iscrizione.giorno = rand () % (30 - 01) + 01;
}
/*for (int j=0; j<4;j++){
/* }*/
strcpy(account[i].nome_utente, string); // copio string all'interno della stringa 'email'
//generazione password
//generazione email
indice = 0;
indice = rand () % 10;
strcat(account[i].email, account[i].nome);
strcat(account[i].email, account[i].cognome);
strcat(account[i].email, email[indice]);
fflush(stdin);
}
fprintf(fp, "%-6s%-15s%-15s%-20s%-32s\n","#","NOME","COGNOME","DATA DI NASCITA","NOME UTENTE");
for (i=0;i<N;i++){
fprintf(fp,"%4d) %-15s%-15s\n",account[i].id, account[i].nome, account[i].cognome);
// fprintf(fp,"%-15s", account[i].nome);
//fprintf(fp, "%-15s", account[i].cognome);
//fprintf(fp,"%-6s%s \t %s\n", account[i].id, account[i].nome, account[i].cognome);
}
printf("%-6s%-15s%-15s%-20s%-32s\n","#","NOME","COGNOME","DATA DI NASCITA","NOME UTENTE");
for(i=0;i<N;i++) {
// stampo a video i risultati del caricamento in forma tabellare
if (account[i].id <= 9){
printf("000%d) ",account[i].id);
} else if (account[i].id <= 99){
printf("00%d) " ,account[i].id);
} else if (account[i].id <= 999){
printf("0%d) " ,account[i].id);
}else if (account[i].id <= 9999){
printf("%d) " ,account[i].id);
}
// printf("%5d) ",account[i].id);
printf("%-15s", account[i].nome);
printf("%-15s", account[i].cognome);
// printf("%15d", stringa1);
// printf("\t\t| #: %d\n", account[i].id);
// printf("\t\t| Nome: %s\n", account[i].nome);
// printf("\t\t| Cognome: %s\n", account[i].cognome);
// per una migliore formattazione se il giorno o il mese contengono un num < 10 aggiungo lo 0
//data nascita
if (account[i].datanascita.giorno < 10) {
printf("0%d-", account[i].datanascita.giorno);
} else {
printf("%d-", account[i].datanascita.giorno);
}
if (account[i].datanascita.mese < 10) {
printf("0%d-", account[i].datanascita.mese);
} else {
printf("%d-", account[i].datanascita.mese);
}
printf("%d%-10s", account[i].datanascita.anno,"");
//data iscrizione
if (account[i].data_iscrizione.giorno < 10) {
printf("0%d-", account[i].data_iscrizione.giorno);
} else {
printf("%d-", account[i].data_iscrizione.giorno);
}
if (account[i].data_iscrizione.mese < 10) {
printf("0%d-", account[i].data_iscrizione.mese);
} else {
printf("%d-", account[i].data_iscrizione.mese);
}
printf("%d%-10s", account[i].data_iscrizione.anno,"");
printf("%-18s", account[i].nome_utente);
//printf("%-18s", account[i].nome_utente);
// printf("%-30s", account[i].email);
// printf("%-20s", tolower([i].nome_utente);
//printf("%-18s", account[i].nome_utente);
// printf("\t\t| NOME UTENTE: %s\n", account[i].email);
// printf("\t\t| PASSWORD: %s\n", account[i].password);
// printf("\t\t| SESSO: %d\n", account[i].sesso);
printf("\n");
}
}
void print(FILE *pfile){
if ((pfile = fopen("studenti.txt", "r+")) == NULL) {
puts("File could not be opened.");
}
else {
utente account[N];
// display record
for(int i=0; i<=4; i++){
fscanf(fd, "%d", &account[i].id);
}
printf("%-6s%-15s%-15s%-20s%-32s\n","#","NOME","COGNOME","DATA DI NASCITA","NOME UTENTE");
}
}
]