RISOLTO Lettura valori con scanf

Pubblicità
Stato
Discussione chiusa ad ulteriori risposte.

JDany

Utente Attivo
Messaggi
467
Reazioni
24
Punteggio
46
Salve.
Volevo chiedervi aiuto su un errore penso molto comune.

C:
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]){
    
    int number;
    
    scanf("%d", &number);
    
    printf("%d", number);
    
    return 0;
}

Questo è un esempio per spiegarmi meglio.
Quando vado a leggere un intero e metto un char (es. 'x') se uso la variabile "number" all'interno di un ciclo il risultato è un ciclo infinito altrimenti esce direttamente dal programma.

Come si risolve?
 
Puoi mettere il codice del ciclo che dicevi ?
O comunque di come fai il controllo.
 
Ultima modifica:
Guarda bene la definizione della funzione scanf() : ritorna un intero, che devi interpretare per capire se ci sono errori di lettura.
 
Puoi mettere il codice del ciclo che dicevi ?
O comunque di come fai il controllo.

Codice:
/**
* Esempio di controllo
* Inserire una valore compreso da 1 e 10
*/
if(!(var >= 1 && var <= 10)){
    do{
        printf("%s", "E' stato inserito un valore scorretto. Riprovare: ");
        scanf("%d", &var);
    }while(!(var >= 1 && var <= 10));
}

Guarda bene la definizione della funzione scanf() : ritorna un intero, che devi interpretare per capire se ci sono errori di lettura.

Infatti faccio il controllo. Solo che non me lo fa fare.
 
Ultima modifica da un moderatore:
Come ti è stato detto la funzione scanf(), restituisce un intero che corrisponde ai dati correttamente letti. Se il valore restituito, nel caso in cui devi leggere un solo dato, è diverso da 1 significa che c'è stato un errore in lettura e quindi ripete l'immissione.

C:
int main (int argc, char **argv) {
   int num;
   printf("Inserisci un numero:\n");

   while (scanf("%d", &num) != 1) {
      printf("Inserisci un'intero non una stringa:\n");
      /* rimuovo eventuali caratteri rimasti nel buffer fino al newline */
      while (getchar() != '\n');
   }
        
   return 0;

}
 
Come ti è stato detto la funzione scanf(), restituisce un intero che corrisponde ai dati correttamente letti. Se il valore restituito, nel caso in cui devi leggere un solo dato, è diverso da 1 significa che c'è stato un errore in lettura e quindi ripete l'immissione.

C:
int main (int argc, char **argv) {
   int num;
   printf("Inserisci un numero:\n");

   while (scanf("%d", &num) != 1) {
      printf("Inserisci un'intero non una stringa:\n");
      /* rimuovo eventuali caratteri rimasti nel buffer fino al newline */
      while (getchar() != '\n');
   }
       
   return 0;

}

Ahh. Grazie per il codice.
 
Stato
Discussione chiusa ad ulteriori risposte.
Pubblicità
Pubblicità
Indietro
Top