Salve gente![]()
Nel codice che sto cercando di sviluppare devo inserire dei dati da terminali e successivamente salvarli in una struct. Prima di fare ciò però devo controllare che tali dati non siano più lunghi di 15 caratteri. Se superano i 15 caratteri l'input viene nuovamente richiesto a loop.
Ho buttato giù questo codice, che non si comporta a dovere. Basta compilare ed avviare provando a scrivere dati più lunghi di 15 caratteri per rendersene facilmente conto
Cosa sbaglio? Graziecodice:#include <unistd.h> #include <string.h> #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <fcntl.h> #define MAX_SIZE 1024 #define SIZE 15 typedef struct ElencoTelefonico{ char name[SIZE]; char surname[SIZE]; char numeroTelefono[SIZE]; }ElencoTelefonico; void verificaInput(ElencoTelefonico record, int flag); int main(int argc, char**argv) { ElencoTelefonico record; verificaInput(record,1); verificaInput(record,2); verificaInput(record,3); printf("Nome: %s",record.name); printf("Cognome: %s",record.surname); printf("Numero: %s", record.numeroTelefono); return 1; } void verificaInput(ElencoTelefonico record, int flag) { char temp[MAX_SIZE]; memset(temp,0,MAX_SIZE); int testscanf; if(flag == 1) { printf("\nInserisci il nome: "); } if(flag == 2) { printf("\nInserisci il cognome: "); } if(flag == 3) { printf("\nInserisci il numero di telefono: "); } do { testscanf = scanf("%s", temp); while(testscanf == -1) { if(errno != EINTR) { printf("\nErrore scanf\n"); exit(0); } else { memset(temp,0,MAX_SIZE); testscanf = scanf("%s", temp); } } if(testscanf == 0 || strlen(temp) > 15){ while(scanf("%*[^\n]") == -1){ if(errno != EINTR){ printf("\nErrore scanf\n"); exit(0); } } memset(temp,0,MAX_SIZE); printf("\nErrore, lunghezza massima pari a 15 caratteri!\n"); if(flag == 1) { printf("\nInserisci il nome: "); } if(flag == 2) { printf("\nInserisci il cognome: "); } if(flag == 3) { printf("\nInserisci il numero di telefono: "); } } }while(testscanf == 0 || strlen(temp) > 15); if(flag == 1) { strcpy(record.name,temp); } if(flag == 2) { strcpy(record.surname,temp); } if(flag == 3) { strcpy(record.numeroTelefono,temp); } return; }![]()

Rispondi quotando