Ma se devo leggere un intero, come faccio ad evitare quindi che un utente mi inserisca mille volte 1 e quindi sfori?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.
La mia lettura dell'intero è attualmente questa:
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".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));
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?