Ho la seguente funzione:
Nella scanf di "TEMP_DATA.identifier" mi preme sapere se è un intero, o se è stato inserito una cifra e quindi valorizzo il errore_lettura con il valore di ritorno della scanf.codice:struct StringPool acquisizione() { struct StringPool TEMP_DATA; int errore_lettura; //flag di controllo per la lettura dell'id int leggi; do{ printf("\nInserire l'ID"); //ciclo per l'inserimento dell'ID.Ciclerà errore_lettura = scanf("%d",&TEMP_DATA.identifier); if(errore_lettura) { printf("E' INTERO!!!!\n\n"); } else { printf("Errore: L'id deve essere un numero intero > 0"); } //fino a quando non verrà immesso un numero positivo } while((TEMP_DATA.identifier < 0) || (errore_lettura == 0)); do{ printf("\nInserire la stringa"); //ciclo per l'inserimento della stringa.Ciclerà scanf("%s",TEMP_DATA.str); //fino a quando non verrà immessa una stringa }while(*TEMP_DATA.str=='\0'); //diversa dalla stringa vuota return(TEMP_DATA); }
Il punto è che per come stanno le cose, se metto un numero tutto bene, se metto delle lettere mi va in loop il ciclo stampandomi all'infinito "Inserire l'IDErrore: L'id deve essere un numero intero > 0".
Dove sto sbagliando? sarà l'orario![]()
Vi ringrazio in anticipo per l'aiuto,
Neptune.