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
codice:
#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;
}
Cosa sbaglio? Grazie