PDA

View Full Version : [C]||[C++] confrontare:intero se è un carattere


scoti
03-12-2005, 18:15
salve a tutti,
volevo sapere come posso confrontare in un ciclo do while se n (int) è un carattere, se lo è il ciclo do while si ripete. esempio:
do{
printf("\nimmettere le persone che entrano al %d spettacolo:" ,loop);
scanf("%d",&n);
}
while(n=getchar,isalpha(n)); //qui ripete il ciclo ma n assume il valore di carattere(perche inizializzato a "n = getchar") quindi per poi (una volta usciti dal ciclo)visionare il contenuto della variabile n (interi senza segno) è pressoche impossibile, difatti n mi da valori sballati.
Quindi come posso confrontare se n è un carattere(in un ciclo do while) in maniera differente?
grazie a tutti anticipatamente

sottovento
05-12-2005, 12:34
Da quello che ho capito, il ciclo ti serve per fare un controllo di validita' sui dati in ingresso.

A dirla tutta, il controllo andrebbe fatto in direzione opposta: e' molto piu' sicuro leggere una stringa, verificare che contenga un numero e continuare.

Il ciclo da te proposto contiene qualche errore di sintassi, ma l'errore di fondo e' l'uso della scanf ("%d", &n), poiche' essa potra' leggere solo valori numerici!

Nel caso l'utente sbagli, ed inserisca dei valori non corretti (come apputno le stringhe di caratteri non numerici), il comportamento di tale istruzione e' indeterminato. Addirittura su molti sistemi l'applicazione va in ciclo infinito.

Ricapitolando:
- nel ciclo while, per prima cosa devi leggere una stringa;
- se la stringa contiene valori numerici, a cui sei interessato, allora puoi convertirla in numero intero e terminare l'esecuzione del ciclo;
- nel caso i valori non siano corretti, continuerai a ciclare.

high flying
Sottovento