Ho la seguente funzione:

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);   
}
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.

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.