RISOLTO problema a stampare dei valori

Pubblicità
Stato
Discussione chiusa ad ulteriori risposte.

palladino.al

Utente Attivo
Messaggi
447
Reazioni
8
Punteggio
55
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 inserita manualmente o automaticamente (utilizzando 3 diversi criteri)
il problema sta che selezionando l'opzione di generazione automatica della password la stampa ignorando i requisiti impostanti e se imposto quella manuale non me la salva nella struct
Codice:
#include "stdio.h"
#include "stdlib.h"
#include "time.h"

#include "string.h"
#include "ctype.h"

#define UTENTI 1
#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 passwordtemp[8];
}utenti;

//funzioni
void generaAnagrafica(utenti account[]);
void generaPassword_automatica_livello1(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.cognome);
            printf(" NOME: %s\n", anagrafica.nome);

            printf("DATA DI NASCITA: ");
                     if(anagrafica.datanascita.giorno < 10){
                         printf("\t0%d\\", anagrafica.datanascita.giorno);
                        }else
                        {
                            printf("\t%d\\", anagrafica.datanascita.giorno);
                        }
                     if(anagrafica.datanascita.mese < 10){
                                  printf("0%d\\", anagrafica.datanascita.mese);
                                 }else
                                 {
                                     printf("%d\\", anagrafica.datanascita.mese < 10);
                                 }
            printf("%d\n", anagrafica.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
                printf("passwird generata manualmente");
                    }
            //generaPassword_automatica_livello1(anagrafica);
                for (int j=0; j<8; j++){
            printf("%c", anagrafica.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 () % UTENTI;
    strcpy(account.nome, nomi[indice_nomi]);

    //RANDOM COGNOMI
    int indice_cognomi = 0;
    indice_cognomi = rand () % UTENTI;
    strcpy(account.cognome, cognomi[indice_cognomi]);

    account.datanascita.anno = rand () % (2019 - 1950) + 1950;
            account.datanascita.mese = rand () % (12 - 01) + 01;
                if(account.datanascita.mese < 10){
                }
            if (account.datanascita.mese==2 && account.datanascita.anno%400==0 ||  (account.datanascita.anno%4==0 &&!(account.datanascita.anno%100==0))){
            account.datanascita.giorno = rand () % (29 - 01) + 01;
        }
            else if (account.datanascita.mese==2){
                account.datanascita.giorno = rand () % (28 - 01) + 01;
            }
            else if (account.datanascita.mese==1 || account.datanascita.mese==3 || account.datanascita.mese==5 || account.datanascita.mese==7 || account.datanascita.mese==8 || account.datanascita.mese==10){
                account.datanascita.giorno = rand () % (31 - 01) + 01;
            }
            else {
                account.datanascita.giorno = rand () % (30 - 01) + 01;
            }
            int  passwordrequisiti = 0;
    }
}

    void generaPassword_automatica_livello1(utenti account[]){
int  passwordrequisiti;

    int i,j;
    setvbuf(stdout, NULL, _IONBF, 0);

    do {
    for(i=0; i< 2; i++){
        for(j=0; j< 8; j++){
              passwordrequisiti = 0;
            do{
                 account.passwordtemp[j] = '!' + rand() % 'z';
                  if ((account.passwordtemp[j] >='!' && account.passwordtemp[j]< '&')
                ||(account.passwordtemp[j] >='?' && account.passwordtemp[j]< '@')
                ||(account.passwordtemp[j] >='0' && account.passwordtemp[j]< '9')
                ||(account.passwordtemp[j] >='a' && account.passwordtemp[j]< 'z')
                ||(account.passwordtemp[j] >='A' && account.passwordtemp[j]< 'Z'))
                passwordrequisiti++;
            } while(passwordrequisiti==0);
    //    printf("%c", account.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< 2; i++){
        for(j=0; j< 8; j++){

            if (isdigit(account.passwordtemp[j])) {
                caratteri_numerici++;
                somma_caratteri_numerici_speciali++;
            } else if (ispunct(account.passwordtemp[j])) {
                caratteri_speciali++;
                somma_caratteri_numerici_speciali++;
                }
            }}

    if (somma_caratteri_numerici_speciali > 5) {

        passwordrequisiti++;

        printf("Rispettano i requisiti :\n");
        for(i=0; i< 2; i++){
            for(j=0; j< 8; j++){
            account.password[j] = account.passwordtemp[j];
                //printf("%c", account.password[j]);
            }
        printf("\n");
        }
    }

    } while(passwordrequisiti==1);
}
 
Ultima modifica da un moderatore:
Ad iniziare dagli import: il doppio apice si utilizza per file header propri.

Con cosa stai compilando?

Ciò che fai non dovrebbe nemmeno compilare; il primo errore che vedo è questo:

C:
 utenti anagrafica[UTENTI];
    for (int i=0; i<UTENTI; i++){
        generaAnagrafica(anagrafica);
        printf("\n%d° ACCOUNT: \n", i + 1);
        printf(" COGNOME: %s\n", anagrafica.cognome);
            printf(" NOME: %s\n", anagrafica.nome);

se anagrafica è un array di utenti (che è il tuo tipo composto, una struttura), non puoi accedere in quel modo. Dovrai specificare l'indice di anagrafica al quale accedere.
Il discorso è analogo per il corpo della funzione generaAnagrafica().
In realtà l'errore lo si corregge facilmente. ;)

Proseguendo, un'annotazione: la scelta sarebbe molto più comodo gestirla come numero, piuttosto che come stringa.

Per quanto riguarda le password invece penso ci siano errori già nel for; visto così mi sembra che l'array vada fuori dai limiti (il ciclo esterno ha come condizione i< 2).
 
Stato
Discussione chiusa ad ulteriori risposte.
Pubblicità
Pubblicità
Indietro
Top