Salta ai contenuti. | Salta alla navigazione

Strumenti personali

Il carattere '\n' nelle scanf

importante


con la presente sono a chiederle un chiarimento riguardo la sequenza \n. In particolare non riesco a capire per quale motivo il programma da me scritto, per il calcolo della media di tre voti, non funziona in modo corretto se ometto tale operatore nella scanf e nel printf quando chiedo se si vuole visualizzare la media voti in trentesimi o in centesimi. Se non sbaglio, l' operatore \n è la notazione usata dal C per identificare il carattere di new line, ma non capisco per quale motivo deve essere usata anche in tali punti.

Il codice da me scritto è il seguente:

 #include <stdio.h>
void main()

{ int a,b,c;
float media;
char scelta;

printf("Inserisci il primo voto: ");
scanf("%d",&a);
printf("Inserisci il secondo voto: ");
scanf("%d",&b);
printf("Inserisci il terzo voto: ");
scanf("%d",&c);
if ((a>=18) && (a<=30) && (b>=18) && (b<=30) && (c>=18) && (c<=30))
{ printf("\nVuoi visualizzare la media in trentesimi o in centesimi [t/c]?\n");
scanf("\n%c",&scelta);
/*Non ho capito perchè va inserito /n sia nella scanf che nella printf dopo le prime virgolette*/
}
...
}

Il problema e` che ogni volta che viene premuto un tasto, il carattere corrispondente viene inserito in un'opportuna area di memoria, chiamata buffer. Quando viene eseguita una scanf, i caratteri vengono letti dal buffer e portati nella variabile che deve essere letta.

Quindi, quando inserisce da tastiera il terzo numero (c), lei preme i tasti corrispondenti alle cifre (ad esempio, 30), e poi batte il tasto "invio". Quindi nel buffer vengono scritti 3 caratteri:

'3' '0' invio

il carattere '3' e lo '0' vengono convertiti in numero intero ed assegnati alla variabile c. Il carattere invio rimane nel buffer. Se la lettura successiva è scanf("%c",&scelta), il carattere invio viene letto dalla scanf, quindi nella variabile scelta verrà inserito il carattere invio.

Uno dei modi per risolvere questo inconveniente e` quello di costringere la scanf a leggere esplicitamente il carattere invio, che in linguaggio C e` rappresentato con '\n'.

Quindi il codice scanf("\n%c",&scelta) legge il carattere invio e lo scarta, poi legge il carattere successivo e questo viene assegnato alla variabile scelta.