Help...memorizzare i dati da un vettore ad una struct

di il
17 risposte

Help...memorizzare i dati da un vettore ad una struct

Ciao ragazzi, scusate per l'ennesimo post ma sto avendo grandi difficoltà ...

non riesco a fare questo punto:
Il sistema deve infine mostrare tutti i dati degli utenti che hanno una password non sicura e nome e cognome degli utenti che hanno una password molto sicura.

non so posso postare il codice?

17 Risposte

  • Re: Help...memorizzare i dati da un vettore ad una struct

    Che vuoi dire ? Non si capisce nulla.

    P.S. Non usare "help" nel titolo ... non serve a nulla.
  • Re: Help...memorizzare i dati da un vettore ad una struct

    In poche parole non riesco a salvare in una struct una password generata automaticamente
  • Re: Help...memorizzare i dati da un vettore ad una struct

    Mostra il codice.
  • Re: Help...memorizzare i dati da un vettore ad una struct

    
    
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <ctype.h>
    #include <string.h>
    #include <stdbool.h>
    
    
    //dichiarazione costanti simboliche
    
    	//costanti simboliche per la funzione "genera_account"
    #define MASSIMO_ACCOUNT 2
    #define LUNGHEZZA_CARATTERI 15
    #define LUNGHEZZA_INDIRIZZO 25
    #define LUNGHEZZA_EMAIL 40
    #define LUNGHEZZA_PASSWORD 8
    #define NUMERO_NOMI 12
    #define NUMERO_COGNOMI 12
    #define NUMERO_INDIRIZZO 12
    #define NUMERO_DOMINI 7
    #define GIORNO_MIN 1
    #define GIORNO_MAX 31
    #define MESE_MIN 1
    #define MESE_MAX 12
    #define ANNO_MIN 1950
    #define ANNO_MAX 2019
    
    //costanti simboliche per la funzione "generapassword"
    #define CARATTERI_PASSWORD_SICURA 5
    #define CARATTERI_PASSWORD_MENO_SICURA 3
    #define CARATTERI_PASSWORD_NON_SICURA 5
    
    // dichiarazioni delle struct
      //dichiarazione struct data
    typedef struct {
    	int giorno;
    	int mese;
    	int anno;
    }data;
    
      //dichiarazione struct data
    typedef struct {
    	char nome[LUNGHEZZA_CARATTERI];
    	char cognome[LUNGHEZZA_CARATTERI];
    	char indirizzo[LUNGHEZZA_INDIRIZZO];
    	char email[LUNGHEZZA_EMAIL];
    	data data_nascita;
    	int password;
    }account;
    
    //funzioni
    void genera_account(account accounts[]);
    void genera_password(account accounts[]);
    void genera_account1(account accounts[]);
    
    
    
    
    int main(void) {
    
    	account accounts[MASSIMO_ACCOUNT];
    	genera_account(accounts);
    	genera_password(accounts);
    	genera_account1(accounts);
    	return 0;
    }
    
    
    
    
     void genera_account(account accounts[]){
    
    	 int seed = (time(NULL));
    	 srand(seed);
    	 int i=0;
    	 int indice = 0;
    	 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* indirizzo [] = {"VIA ALDO MORO", "CORSO VITTORIO EMANUELE", "PIAZZA CADUTI IN GUERRA", "PIAZZA CASTELLO", "VIA CANOSA", "LARGO REGINA ELENA", "PIAZZA F.LLI CERVI", "VIA FIERAMOSCA", "VIA GOITO", "VIA IZZI", "CORSO AMENDOLA", "VIA ROMA"};
    	 char* email[] = {"@gmail.com", "@gmail.it", "@hotmail.it", "@hotmail.it", "@aruba.it", "@aruba.com", "@libero.it"};
    	 // RANDOM NOMI
    	for (i=0; i<MASSIMO_ACCOUNT; i++){
    	indice = 0;
    	indice = rand () % NUMERO_NOMI;
    	strcpy(accounts[i].nome, nomi[indice]);
    
    	indice = 0;
    	indice  = rand () % NUMERO_COGNOMI;
    	strcpy(accounts[i].cognome, cognomi[indice]);
    
    	indice = 0;
    	indice  = rand () % NUMERO_INDIRIZZO;
    	strcpy(accounts[i].indirizzo, indirizzo[indice]);
    
    	indice = 0;
    	indice  = rand () % NUMERO_DOMINI;
    	strcat(accounts[i].email, accounts[i].nome);
    	strcat(accounts[i].email, accounts[i].cognome);
    	strcat(accounts[i].email, email[indice]);
    
    	//generazione controllo anno bistestile
    	accounts[i].data_nascita.anno = rand () % (2019 - 1950) + 1950;
    			accounts[i].data_nascita.mese = rand () % (12 - 01) + 01;
    				if(accounts[i].data_nascita.mese < 10){
    
    				}
    
    			if (accounts[i].data_nascita.mese==2 && accounts[i].data_nascita.anno%400==0 ||  (accounts[i].data_nascita.anno%4==0 &&!(accounts[i].data_nascita.anno%100==0))){
    			accounts[i].data_nascita.giorno = rand () % (29 - 01) + 01;
    		}
    			else if (accounts[i].data_nascita.mese==2){
    				accounts[i].data_nascita.giorno = rand () % (28 - 01) + 01;
    			}
    			else if (accounts[i].data_nascita.mese==1 || accounts[i].data_nascita.mese==3 || accounts[i].data_nascita.mese==5 || accounts[i].data_nascita.mese==7 || accounts[i].data_nascita.mese==8 || accounts[i].data_nascita.mese==10){
    				accounts[i].data_nascita.giorno = rand () % (31 - 01) + 01;
    			}
    			else {
    				accounts[i].data_nascita.giorno = rand () % (30 - 01) + 01;
    			}
    
     //stampa
    
     printf("Nome: \t\t%s\t\n", accounts[i].nome);
     printf("COGNOME: \t%s\n", accounts[i].cognome);
     printf("INDIRIZZO: \t%s\n", accounts[i].indirizzo);
     printf("INDIRIZZO EMAIL: \t%s\n", accounts[i].email);
     printf("DATA DI NASCITA: ");
    		 if(accounts[i].data_nascita.giorno < 10){
    			 printf("\t0%d\\", accounts[i].data_nascita.giorno);
    			}else
    			{
    				printf("\t%d\\", accounts[i].data_nascita.giorno);
    			}
    		 if(accounts[i].data_nascita.mese < 10){
    		 			 printf("0%d\\", accounts[i].data_nascita.mese);
    		 			}else
    		 			{
    		 				printf("%d\\", accounts[i].data_nascita.mese < 10);
    		 			}
    printf("%d\n", accounts[i].data_nascita.anno);
     //printf("DATA DI NASCITA: \t%d\\%d\\%d\n", accounts[i].data_nascita.giorno, accounts[i].data_nascita.mese, accounts[i].data_nascita.anno);
    
     puts("***************************************************");
    	}
     }
    
    	 void genera_password(account accounts[]){
    		 bool passwCorretta = false;	//fin quando la password inserita non rispetta i requisiti rimane false
    		 int i=0;
    		 //int random = 0;	//utilizzata per generazione password automatica
    		 	char menu_scelta[2];	//scelta utente inserimento automatico o manuale
    		 	char menu_scelta_sicurezza_password[2];	//scelta utente livello complessità
    
    		 	//Per ogni account chiede all’utente se vuole generare la password in automatico
    		 		//o se vuole inserirla a mano
    		 		for (i = 0; i < MASSIMO_ACCOUNT; i++) {
    		 			char password[LUNGHEZZA_PASSWORD];
    		 			passwCorretta = false;
    		 			puts("**INSERIMENTO PASSWORD**");
               puts("\nSCEGLIERE LA MODALITA' DI INSERIMENTO DELLA PASSWORD\n");
    
    
    		 			//controllo input utente
    		 			//non esce dal ciclo fin quando l'utente non inserisce 1 o 2
    		 			do{
    		 				printf("1) GENERAZIONE AUTOMATICA DELLA PASSWORD\n");
    		 				printf("2) INSERIMENTO DELLA PASSWORD\n");
    		 			  printf("l'opzione desiderata e' la: ");
    		 				scanf("%s", menu_scelta);
    		 			}while(strcmp(menu_scelta,"1") && strcmp(menu_scelta,"2"));
    
    		 			if (strcmp(menu_scelta,"1") == 0) {	//inserimento automatico
    		 				do{
    		 					printf("\nSelezionare il livello di complessita'\n");
    		 					printf("1) Poco sicura (la password è composta da meno di 3 caratteri sia numerici sia simboli\n");
    		 					printf("2) Mediamente sicura\n(la password è composta dai 3 ai 5 caratteri sia numerici sia simboli\n");
    		 					printf("3) Sicura\n(la password è composta da almeno 5 caratteri sia numerici sia simboli\n");
    		 					puts("SELEZIONA IL TIPO DI PASSWORD DESIDERATA: ");
    		 					scanf("%s", menu_scelta_sicurezza_password);
    		 				}while(strcmp(menu_scelta_sicurezza_password,"1") && strcmp(menu_scelta_sicurezza_password,"2") && strcmp(menu_scelta_sicurezza_password,"3"));
    
    		 				printf("Password generata: ");
    
    		 				if(strcmp(menu_scelta_sicurezza_password,"1") == 0){
    
                 bool password_con_requisiti = false;
    		 					int i=0;
    		 								do{
    		 									int caratteri_numerici = 0;
    		 									int caratteri_speciali = 0;
    		 									int somma_caratteri_numerici_speciali = 0;
    
    
    		 								for(i=0; i<LUNGHEZZA_PASSWORD; i++){
    		 								bool password_corretta = false;
    		 								do {
    		 										accounts[i].password = '!' + rand() % 'z';
    		 										if ((accounts[i].password >= '!' && accounts[i].password < '&')
    		 								      || (accounts[i].password >= '0' && accounts[i].password <= '9')
    		 											|| (accounts[i].password >= 'a' && accounts[i].password <= 'z')
    		 											|| (accounts[i].password >= 'A' && accounts[i].password <= 'Z'))
    		 										password_corretta = true;
    		 									}while(!password_corretta);
    		 								}
    
    		 									for(i=0; i<LUNGHEZZA_PASSWORD;i++){
    		 										if (isdigit(accounts[i].password)) {
    		 											caratteri_numerici++;
    		 											somma_caratteri_numerici_speciali++;
    		 										} else if (ispunct(accounts[i].password)) {
    		 											caratteri_speciali++;
    		 											somma_caratteri_numerici_speciali++;
    		 										}
    		 									}
    		 											if ((somma_caratteri_numerici_speciali <= 2)) {
    		 											for(i=0; i<LUNGHEZZA_PASSWORD;i++){
    		 												printf("%c", accounts[i].password);
    		 												}
    		 											printf("\n");
    		 											password_con_requisiti = true;
    		 											}
    		 										}while(!password_con_requisiti);
    
    
    
    		 				} else if(strcmp(menu_scelta_sicurezza_password,"2") == 0){
    
    
    
    		 							bool password_con_requisiti = false;
    		 					int i=0;
    		 								do{
    		 									int caratteri_numerici = 0;
    		 									int caratteri_speciali = 0;
    		 									int somma_caratteri_numerici_speciali = 0;
    
    
    		 								for(i=0; i<LUNGHEZZA_PASSWORD; i++){
    		 								bool password_corretta = false;
    		 								do {
    		 										accounts[i].password = '!' + rand() % 'z';
    		 										if ((accounts[i].password >= '!' && accounts[i].password < '&')
    		 								      || (accounts[i].password >= '0' && accounts[i].password <= '9')
    		 											|| (accounts[i].password >= 'a' && accounts[i].password <= 'z')
    		 											|| (accounts[i].password >= 'A' && accounts[i].password <= 'Z'))
    		 										password_corretta = true;
    		 									}while(!password_corretta);
    		 								}
    
    		 									for(i=0; i<LUNGHEZZA_PASSWORD;i++){
    		 										if (isdigit(accounts[i].password)) {
    		 											caratteri_numerici++;
    		 											somma_caratteri_numerici_speciali++;
    		 										} else if (ispunct(accounts[i].password)) {
    		 											caratteri_speciali++;
    		 											somma_caratteri_numerici_speciali++;
    		 										}
    		 									}
    		 									 if ((somma_caratteri_numerici_speciali >=3) && (somma_caratteri_numerici_speciali <=4)) {
    		 											for(i=0; i<LUNGHEZZA_PASSWORD;i++){
    		 												printf("%c", accounts[i].password);
    		 												}
    		 											printf("\n");
    		 											password_con_requisiti = true;
    		 											}
    		 										}while(!password_con_requisiti);
    
    		 				}else if (strcmp(menu_scelta_sicurezza_password,"3") == 0){
    
    		 					bool password_con_requisiti = false;
    		 					int i, k=0;
    		 								do{
    		 									int caratteri_numerici = 0;
    		 									int caratteri_speciali = 0;
    		 									int somma_caratteri_numerici_speciali = 0;
    
    
    		 								for(i=0; i<LUNGHEZZA_PASSWORD; i++){
    		 								bool password_corretta = false;
    		 								do {
    		 										accounts[i].password = '!' + rand() % 'z';
    		 										if ((accounts[i].password >= '!' && accounts[i].password < '&')
    		 								      || (accounts[i].password >= '0' && accounts[i].password <= '9')
    		 											|| (accounts[i].password >= 'a' && accounts[i].password <= 'z')
    		 											|| (accounts[i].password >= 'A' && accounts[i].password <= 'Z'))
    		 										password_corretta = true;
    		 									}while(!password_corretta);
    		 								}
    
    		 									for(i=0; i<LUNGHEZZA_PASSWORD;i++){
    		 										if (isdigit(accounts[i].password)) {
    		 											caratteri_numerici++;
    		 											somma_caratteri_numerici_speciali++;
    		 										} else if (ispunct(accounts[i].password)) {
    		 											caratteri_speciali++;
    		 											somma_caratteri_numerici_speciali++;
    		 										}
    		 									}
    		 											if (somma_caratteri_numerici_speciali >= CARATTERI_PASSWORD_SICURA) {
    		 											for(i=0; i<LUNGHEZZA_PASSWORD;i++){
    		 											//accounts[i].password = password[i];
    		 												printf("%c", accounts[i].password);
    		 												}
    
                               printf("\n");
    		 											password_con_requisiti = true;
    
    		 											}
    		 											}while(!password_con_requisiti);
    
    		 				}
    		 			} else if (strcmp(menu_scelta,"2") == 0) {	//inserimento a mano
               char password[LUNGHEZZA_PASSWORD];
    			int caratteri_numerici = 0;
    			int caratteri_speciali = 0;
    			bool password_corretta = false; //bool
    			int lunghezza_password=0;
    			int i =0;
    
    			do{
    
    				printf("Inserisci la password: ");
    				scanf("%s", password);
    				 lunghezza_password = strlen(password);
    				if (lunghezza_password == 8) {
    					for (i = 0; i < LUNGHEZZA_PASSWORD; i++) {
    						//controllo se è presente almeno un numero o una maiuscola
    						if (isdigit(password[i])) {
    							caratteri_numerici++;
    						} else if (ispunct(password[i])) {
    							caratteri_speciali++;
    						}
    					}
    					if (caratteri_numerici > 0 && caratteri_speciali > 0) {
    
    
    							puts("LA PASSWORD E' MEMORIZZATA CORRETTAMENTE");
                  puts("\n");
    
    							password_corretta = true;
    
    						}
    
    else {
    						printf("La password non contiene un numero o una lettera maiuscola\n");
    
    
    					}
    					}
    					else {
    				printf("Hai inserito %d caratteri! La password deve essere di 8 caratteri\n", lunghezza_password);
    				}
    				}while(!password_corretta);
    		 			}
    
    
    	 }
     int somma_caratteri_numerici_speciali = 0;
     int caratteri_numerici = 0;
     int caratteri_speciali = 0;
    
    
    
     }
    
    
    
    
    
    
    
    
    
       void genera_account1(account accounts[]){
     int i = 0;
    	   //	printf("\n\n%-10s%-10s%-20s%-18s%-30s%-8s\n","NOME","COGNOME","DATA DI NASCITA","INDIRIZZO","EMAIL","PASSWORD");
    for (int k=0; k < MASSIMO_ACCOUNT; k++){
    	   	for (i = 0; i < MASSIMO_ACCOUNT; i++) {
    	     printf("Nome: \t\t%s\t\n", accounts[i].nome);
    	    printf("COGNOME: \t%s\n", accounts[i].cognome);
    	    printf("INDIRIZZO: \t%s\n", accounts[i].indirizzo);
    	    printf("INDIRIZZO EMAIL: \t%s\n", accounts[i].email);
    	    printf("DATA DI NASCITA: ");
    	   		 if(accounts[i].data_nascita.giorno < 10){
    	   			 printf("\t0%d\\", accounts[i].data_nascita.giorno);
    	   			}else
    	   			{
    	   				printf("\t%d\\", accounts[i].data_nascita.giorno);
    	   			}
    	   		 if(accounts[i].data_nascita.mese < 10){
    	   		 			 printf("0%d\\", accounts[i].data_nascita.mese);
    	   		 			}else
    	   		 			{
    	   		 				printf("%d\\", accounts[i].data_nascita.mese < 10);
    	   		 			}
    	   printf("%d\n", accounts[i].data_nascita.anno);
    	    //printf("DATA DI NASCITA: \t%d\\%d\\%d\n", accounts[i].data_nascita.giorno, accounts[i].data_nascita.mese, accounts[i].data_nascita.anno);
    	    printf("password: ");
    	    for(i=0; i<MASSIMO_ACCOUNT; i++){
    	    for(int j=0; j<8;j++){
    	    	printf("%c", accounts[j].password);
    	    	}
    	    }
    	   	}
    
    	   	}}
    
    
    
  • Re: Help...memorizzare i dati da un vettore ad una struct

    Cosa devi passare? Da dove a dove?
  • Re: Help...memorizzare i dati da un vettore ad una struct

    Ad ogni utente devo associare la sua password e mostrare quelle sicure e quelle non sicure...
  • Re: Help...memorizzare i dati da un vettore ad una struct

    Così non hai spiegato cosa non sai fare
  • Re: Help...memorizzare i dati da un vettore ad una struct

    Non riesco ad associare la password al proprio utente, se faccio la selezione 1 e 3 (generazione pass sicura) si me la genera ma a quanto pare immagino che non me la salva xk quando poi vado a stampare esce la stessa password ripetuta
  • Re: Help...memorizzare i dati da un vettore ad una struct

    Vuoi dire che ci sono errori in genera_password ?
  • Re: Help...memorizzare i dati da un vettore ad una struct

    Presumo di si...non so se e dovuto alla funzione stampa
  • Re: Help...memorizzare i dati da un vettore ad una struct

    Tu stampi la password come caratteri ma nella struttura la password è un numero int

    Perché?
  • Re: Help...memorizzare i dati da un vettore ad una struct

    Xk mi genera un errore se la dichiaro una char di [8]

    main.c:40:35: error: array type 'char [8]' is not assignable
  • Re: Help...memorizzare i dati da un vettore ad una struct

    Non mi pare un buon motivo. Se hai usato un array di 8 char per generare la password, deve essere un array di 8 char per conservarla nella struttura.

    Dove hai l'errore di cui parli?
  • Re: Help...memorizzare i dati da un vettore ad una struct

    Nella impostazione della struct se imposto char alla variabile "password" mi genera quel errore
Devi accedere o registrarti per scrivere nel forum
17 risposte