|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Apr 2004
Messaggi: 5
|
[Principiante C] Domanda su getchar()
Sto muovendo i miei primi passi nel C, e mi trovo dinanzi ad un problema che vorrei capire se nasce da un mio fraintendimento del getchar(), da un mio errore di scrittura o altro.
Se io utilizzo getchar() per leggere un carattere all'interno di un ciclo for ed utilizzare tale carattere in una struttura switch: es. (il programmino è volutamente semplicistico ed inutile per cercare di esporre il problema nella forma più chiara spero possibile): Codice:
for (cont =1; cont = 10; cont++){
carattere = getchar();
switch (carattere){
case 'a':
variabile = 1;
break;
case 'b':
variabile = 2;
break;
case 'd':
variabile = 3;
break;
case '\n': /*è giusto per ignorare il carattere nell'input?*/
break;
default:
printf("Non hai inserito un carattere corretto.\n");
cont--; /*per non considerare questo inserimento nel conteggio*/
}
totale += variabile;
}
Ho capito con il debug (ci ho messo un po' Come dovrei fare perchè invece l'invio non venga letto? Ho provato con un escamotage, cioè raddoppiando la lunghezza del ciclo for, ma mi pare molto raffazzonata come soluzione. Ringrazio chiunque riesca a darmi un prezioso suggerimento. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jan 2004
Città: Montignoso(MS)
Messaggi: 9456
|
Scusami ma non ho ben capito cosa tu intenda fare con quella condizione nel for ovvero for (count = 1, count = 10, cont++)
Se non ho capito male sarebbe piu' "decente" un semplice for(cont=0, cont < 10, cont++)... Quello che ti da qualche "problema" e' il fatto che la getchar() effettui la bufferizzazione e pertanto finche' non hai digitato un certo numero di caratteri sulla stessa linea oppure non hai fatto una new line non fa nessuna azione (Penso...). Potresti semplicemente fare: ... case '\n': cont--; break; /*Cosi' lo ignori*/ Prova...
__________________
"Il Meglio che si possa ottenere è evitare il peggio." I.C. |
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Jul 2004
Messaggi: 17
|
scusa è da 3 anni che non utilizzo c.. ma io lo modificherei cosi:
for (cont =1; cont = 10; cont++){ carattere = getchar(); switch (carattere){ case 'a': variabile = 1; break; case 'b': variabile = 2; break; case 'd': variabile = 3; break; default: printf("Non hai inserito un carattere corretto.\n"); cont--; /*per non considerare questo inserimento nel conteggio*/ } cont--; totale += variabile; } occhio pero che cosi puoi inserire solo un valore da tastiera alla volta senza utilizzare il buffer di getchar() che ti consentirebbe una lettura di piu valori. (non ho provato però). Ultima modifica di nark81 : 07-07-2004 alle 02:07. |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Jan 2004
Città: Montignoso(MS)
Messaggi: 9456
|
Quote:
__________________
"Il Meglio che si possa ottenere è evitare il peggio." I.C. |
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Infatti quel ciclo viene fatto sempre e solo una volta...
|
|
|
|
|
|
#6 | |
|
Junior Member
Iscritto dal: Apr 2004
Messaggi: 5
|
Quote:
la forma corretta sarebbe for (cont =1; cont <=10; cont++) Risolvo come suggerito da voi inserendo in case 'n': cont-- etc; era giusto per sapere se magari avevo frainteso il funzionamento di getchar, e se quello che mi risultava era normale. Grazie ancora ciao |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:46.



















