Originariamente inviato da MItaly
Devi calcolarti qual è la dimensione massima della rappresentazione decimale di un int a priori; tieni presente che non puoi mai fare quel tipo di giochi con la strlen, visto che se usi buffer statici questi devono essere dimensionati prima del loro uso; se sfori le dimensioni di un buffer sei già nei guai, non ci puoi mettere toppe a posteriori con la strlen.
Ma se devo leggere un intero, come faccio ad evitare quindi che un utente mi inserisca mille volte 1 e quindi sfori?

La mia lettura dell'intero è attualmente questa:

codice:
       do{
            fflush(stdin);
            printf("\nInserire l'ID: ");
            errore_lettura = scanf("%d",&TEMP_DATA.identifier);
            if(errore_lettura)
            {
                //debug
               //printf("E' INTERO!!!!\n\n");    
               //debug                                 
            }
            else
            {
               printf("Errore: L'id deve essere un numero intero > 0"); 
               fflush(stdin);
            }
            
            
         }
         while((TEMP_DATA.identifier < 0) || (errore_lettura == 0));
L'unica cosa che controllo è il ritorno della scanf, che mi dice se è stato realmente inserito un intero o meno. Però mi accorgo che se metto come input un sacco di 1 non mi da nessun messaggio sdi errore e mi ripete la "lettura come nulla fosse", gli rido molti 1 in input e mi ripete la lettura, ci riprovo e mi legge "un valore a casaccio".


E' un problema che mi fa un pò "random" o meglio, non riesco a determinare il perchè.

Per tagliare la testa al toro come posso proprio evitare l'inserimento di troppe cifre? una scanf non fa nessun genere di controllo?