RISOLTO problema a stampare dei valori

Stato
Discussione chiusa ad ulteriori risposte.

palladino.al

Utente Attivo
300
6
CPU
Intel T7200
Scheda Madre
Acer
HDD
160
RAM
ddr2 1gbx2
GPU
Nvidia
Audio
Realteck
Monitor
Samsung (Acer)
Case
notebook
OS
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

Moderatore
Staff Forum
Utente Èlite
2,210
1,846
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
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.

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili