PROBLEMA problema a stampare dei valori

palladino.al

Utente Attivo
20
0
CPU
Intel T7200
Scheda Madre
Acer
Hard Disk
160
RAM
ddr2 1gbx2
Scheda Video
Nvidia
Scheda Audio
Realteck
Monitor
Samsung (Acer)
Case
notebook
Sistema Operativo
Windows Linux
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:

DispatchCode

Utente Attivo
636
397
CPU
Intel i7 6700HQ, 2.60Ghz, 4 core 8 threads
Scheda Madre
Asustek
Hard Disk
Hitachi 7200 rpm, 1TB
RAM
16GB DDR4 (2 slot su 4)
Scheda Video
Nvidia Geforce GTX 960M, 4GB
Scheda Audio
Realtek
Sistema Operativo
Windows 10 64bit
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).
 

Entra

oppure Accedi utilizzando