frncmrt
06-07-2004, 23:07
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):
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;
}
succede che il for viene eseguito (cioè, viene inserita la variabile "carattere") un numero dimezzato di volte rispetto a quanto mi sarei aspettato.
Ho capito con il debug (ci ho messo un po' :muro: ) , che questo avviene perchè, quando vado ad inserire il "carattere", e premo invio per far leggere al programma la lettera, la prima volta che il ciclo viene eseguito mi viene considerata la lettera come carattere imesso (a,b,c, o altro), mentre la seconda volta che viene eseguito il ciclo, mi viene considerato automaticamente l'invio come carattere imesso e quindi salto al valore di cont successivo (più brevemente, nonostante abbia fatto un unico inserimento nella forma lettera +[return], il getchar() legge due valori).
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.
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):
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;
}
succede che il for viene eseguito (cioè, viene inserita la variabile "carattere") un numero dimezzato di volte rispetto a quanto mi sarei aspettato.
Ho capito con il debug (ci ho messo un po' :muro: ) , che questo avviene perchè, quando vado ad inserire il "carattere", e premo invio per far leggere al programma la lettera, la prima volta che il ciclo viene eseguito mi viene considerata la lettera come carattere imesso (a,b,c, o altro), mentre la seconda volta che viene eseguito il ciclo, mi viene considerato automaticamente l'invio come carattere imesso e quindi salto al valore di cont successivo (più brevemente, nonostante abbia fatto un unico inserimento nella forma lettera +[return], il getchar() legge due valori).
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.