Discussione chiusa
Visualizzazione dei risultati da 1 a 2 su 2

Discussione: il programma termina o non stampa quello richiesto

  1. #1
    palladino.al non è in linea Novello
    Post
    10

    il programma termina o non stampa quello richiesto

    Ciao a tutti...mi sono bloccato in una cosa
    sto "cercando" di creare un programma che dato un numero di utenti mi deve generare le generalità di ogni utente e attraverso un menu devo scegliere se la password dovra essere impostata manualmente o automatica(utilizzando 3 diversi criteri)
    il problema sta che se seleziono l'opzione di generazione automatica della password la stampa ignorando i requisiti impostanti mentre se decido di impostare io la password mi termina il programma.

    codice:
    #include "stdio.h"
    #include "stdlib.h"
    #include "time.h"
    
    #include "string.h"
    #include "ctype.h"
    
    
    
    #define UTENTI 2
    #define LUNGHEZZAPASS 8
    #define LUNGHEZZA_CARETTERI 25
    #define LUNGHEZZA_INDIRIZZO 45
    #define LUNGHEZZA_EMAIL 75
    #define LUNGHEZZA_DOMINI 7
    
    
    
    
    
    typedef struct {
    	int giorno;
    	int mese;
    	int anno;
    }data;
    
    typedef struct {
    	char nome[LUNGHEZZA_CARETTERI+1];
    	char cognome[LUNGHEZZA_CARETTERI+1];
    	data datanascita;
    	char password[8];
    	char passwordef[8];
    	char passwordtemp[8];
    }utenti;
    
    
    
    //funzioni
    void generaAnagrafica(utenti account[]);
    void generaPassword_automatica_livello1(utenti account[]);
    void passwird_generata_manualmente(utenti account[]);
    //void generaPassword_automatica_livello2(utenti account[]);
    //void generaPassword_automatica_livello3(utenti account[]);
    void stampaDatiCompleti(utenti accounts[]);
    
    
    int main(){
    	setvbuf(stdout, NULL, _IONBF, 0);
    
    	utenti anagrafica[UTENTI];
    	for (int i=0; i<UTENTI; i++){
    		generaAnagrafica(anagrafica);
    		printf("\n%d° ACCOUNT: \n", i + 1);
    		printf(" COGNOME: %s\n", anagrafica[i].cognome);
    			printf(" NOME: %s\n", anagrafica[i].nome);
    
    			printf("DATA DI NASCITA: ");
    					 if(anagrafica[i].datanascita.giorno < 10){
    						 printf("\t0%d\\", anagrafica[i].datanascita.giorno);
    						}else
    						{
    							printf("\t%d\\", anagrafica[i].datanascita.giorno);
    						}
    					 if(anagrafica[i].datanascita.mese < 10){
    					 			 printf("0%d\\", anagrafica[i].datanascita.mese);
    					 			}else
    					 			{
    					 				printf("%d\\", anagrafica[i].datanascita.mese < 10);
    					 			}
    			printf("%d\n", anagrafica[i].datanascita.anno);
    
    			char scelta[2];
    			char sceltaSicurezza[2];
    			do{
    						printf("1) Generare la password in automatico\n");
    						printf("2) Inserire la password manualmente\n");
    						printf("Effettui una scelta (1 o 2): ");
    						puts("\n*****************************************");
    						scanf("%s", scelta);
    					}while(strcmp(scelta,"1") && strcmp(scelta,"2"));
    			if (strcmp(scelta,"1") == 0) {	//inserimento automatico
    				do{
    					printf("\nSelezionare il livello di complessita'\n");
    					printf("1) Poco sicura\n");
    					//printf("2) Mediamente sicura\n");
    					//printf("3) Sicura\n");
    					printf("Effettui una scelta: ");
    					scanf("%s", sceltaSicurezza);
    				}while(strcmp(sceltaSicurezza,"1") && strcmp(sceltaSicurezza,"2") && strcmp(sceltaSicurezza,"3"));
    
    				printf("Password generata: ");
    
    				if(strcmp(sceltaSicurezza,"1") == 0){
    
    					 generaPassword_automatica_livello1(anagrafica);
    
    
    
    				} else if(strcmp(sceltaSicurezza,"2") == 0){
    
    				//	 generaPassword_automatica_livello2(anagrafica);
    
    				}else if (strcmp(sceltaSicurezza,"3") == 0){
    
    				//	 generaPassword_automatica_livello3(anagrafica);
    
    				}
    			} else if (strcmp(scelta,"2") == 0) {	//inserimento a mano
    				passwird_generata_manualmente(anagrafica);
    					}
    
    
    			//generaPassword_automatica_livello1(anagrafica);
    
    				for (int j=0; j<LUNGHEZZAPASS; j++){
    			printf("%c", anagrafica[i].password[j]);
    
    
    			}
    
    
    	}
    
    
    	 // stampaDatiCompleti(anagrafica);
    	return 0;
    }
    
    void generaAnagrafica(utenti account[]){
    
    
    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* email[] = {"@gmail.com", "@gmail.it", "@hotmail.it", "@hotmail.it", "@aruba.it", "@aruba.com", "@libero.it"};
    
    int i;
    	for ( i=0; i<UTENTI; i++){
    	// RANDOM NOMI
    	int indice_nomi = 0;
    	indice_nomi = rand () % 12;
    	strcpy(account[i].nome, nomi[indice_nomi]);
    
    	//RANDOM COGNOMI
    	int indice_cognomi = 0;
    	indice_cognomi = rand () % 12;
    	strcpy(account[i].cognome, cognomi[indice_cognomi]);
    
    	account[i].datanascita.anno = rand () % (2019 - 1950) + 1950;
    			account[i].datanascita.mese = rand () % (12 - 01) + 01;
    				if(account[i].datanascita.mese < 10){
    
    				}
    
    			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;
    			}
    			int  passwordrequisiti = 0;
    
    
    
    
    	}
    }
    
    	void passwird_generata_manualmente(utenti account[]){
    
    
    		int numero = 0;
    					int maiuscola, speciale, somma = 0;
    					int corretto= 0;
    					int lunghezza;
    				//	char password[8];
    					int i, j;
    	//	for (int i=0; i<2; i++){
    					char password[8];
    								numero = 0;
    								maiuscola = 0;
    
    								do{
    									printf("Inserisci la password: ");
    									scanf("%s", password);
    									int lunghezza = strlen(password);
    
    									if (lunghezza == 8) {
    										for (int i = 0; i < LUNGHEZZAPASS; i++) {
    											//controllo se è presente almeno un numero o una maiuscola
    											if (isdigit(password)) {
    												numero++;
    											} else if (isupper(password)) {
    												maiuscola++;
    											}
    										}
    										if (numero > 0 && maiuscola > 0) {
    											//copio la password in accounts[i]
    										for(int j = 0; j < LUNGHEZZAPASS; j++){
    											strcpy(account[i].password[j], password);
    										}
    
    											corretto++;
    
    										} else {
    											printf("La password non contiene un numero o una lettera maiuscola\n");
    										}
    									} else {
    										printf("La password deve essere di 8 caratteri\n");
    									}
    								}while (corretto ==0);
    
    	}
    
    	void generaPassword_automatica_livello1(utenti account[]){
    
    
    
    
    	int  passwordrequisiti;
    
    
    
    
    
    
    		int i,j;
    
    
    
    
    
    
    		do {
    
    
    
    
    		for(i=0; i< UTENTI; i++){
    
    
    			for(j=0; j< LUNGHEZZAPASS; j++){
    
    
    		  		passwordrequisiti = 0;
    
    
    				do{
    			 		account[i].passwordtemp[j] = '!' + rand() % 'z';
    			  		if ((account[i].passwordtemp[j] >='!' && account[i].passwordtemp[j]< '&')
    					||(account[i].passwordtemp[j] >='?' && account[i].passwordtemp[j]< '@')
    					||(account[i].passwordtemp[j] >='0' && account[i].passwordtemp[j]< '9')
    					||(account[i].passwordtemp[j] >='a' && account[i].passwordtemp[j]< 'z')
    					||(account[i].passwordtemp[j] >='A' && account[i].passwordtemp[j]< 'Z'))
    					passwordrequisiti++;
    				} while(passwordrequisiti==0);
    		//	printf("%c", account[i].passwordtemp[j]);
    			} //printf("\n");
    		}
    
    
    		//printf("\n\n");
    
    
    	int caratteri_numerici = 0;
    	int caratteri_speciali = 0;
    	int somma_caratteri_numerici_speciali = 0;
    
    
    		for(i=0; i< UTENTI; i++){
    			for(j=0; j< LUNGHEZZAPASS; j++){
    
    
    				if (isdigit(account[i].passwordtemp[j])) {
    					caratteri_numerici++;
    					somma_caratteri_numerici_speciali++;
    				} else if (ispunct(account[i].passwordtemp[j])) {
    					caratteri_speciali++;
    					somma_caratteri_numerici_speciali++;
    					}
    				}}
    
    
    		if (somma_caratteri_numerici_speciali > 5) {
    
    
    			passwordrequisiti++;
    
    
    			printf("Rispettano i requisiti :\n");
    			for(i=0; i< UTENTI; i++){
    				for(j=0; j< LUNGHEZZAPASS; j++){
    				account[i].password[j] = account[i].passwordtemp[j];
    					//printf("%c", account[i].password[j]);
    
    
    				}
    			printf("\n");
    			}
    		}
    
    
    		} while(passwordrequisiti==1);
    
    
    
    
    	}

  2. #2
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    16,208
    Blogs
    5
    Hai letto il regolamento?

    Chiudo per CROSSPOSTING con

    https://www.iprogrammatori.it/forum-...ma-t38802.html
    Avvisi generali e importanti, a pena CHIUSURA thread e/o BAN
    Il crossposting è vietato.
    Le richieste di "pappa pronta" sono vietate.
    Utilizzate i tag CODE per il codice.
    Leggere il Regolamento per chiarimenti PRIMA di creare nuovi thread.
    Utilizzare sempre i PM per comunicare con i moderatori.
    Non mi contattate in PM per problemi di software, usate il forum

Discussione chiusa

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi