[c] dubbio funzionamento scanf
Buongiorno,
ho il seguente programma...
i valori li voglio acquisire da tastiera, il problema è che durante l'esecuzione invece che richiedere 2 valori da inserire, il programma ne richiede 3..
un primo valore (che non capisco cosa sia)
un secondo che è la mia $a$
e un terzo che è la mia variabile $b$
probabilmente il problema sta nel come ho strutturato la scanf...ma non capisco
ho il seguente programma...
#include <stdio.h> main() { int a; int b; scanf("%d\n", &a); scanf("%d\n", &b); if (a==b) { printf("I due numeri sono uguali"); } else { printf("I numeri inseriti sono diversi"); } }
i valori li voglio acquisire da tastiera, il problema è che durante l'esecuzione invece che richiedere 2 valori da inserire, il programma ne richiede 3..

un primo valore (che non capisco cosa sia)
un secondo che è la mia $a$
e un terzo che è la mia variabile $b$
probabilmente il problema sta nel come ho strutturato la scanf...ma non capisco

Risposte
Che compilatore stai usando? Il codice che hai scritto tu non dovrebbe comportarsi come dici.
"vict85":
Che compilatore stai usando? Il codice che hai scritto tu non dovrebbe comportarsi come dici.
gnu GCC su ubuntu
Se togli il ‘\n’ dovrebbe funzionare. Dovrei ragionarci sopra sul perché si comporta così.
si togliendo il \n funziona! ma chissà mai perchè...grazie mille!
Qualsiasi carattere di tipo spazio all'interno della stringa di formato di scanf (e simili) è una richiesta a leggere (e poi ignorare) tutti gli spazi (o caratteri di a capo o tabulazioni) presenti nel buffer di lettura fino ad un carattere diverso da uno spazio. Siccome la lettura da scanf avviene (di default) linea per linea (nel senso che l'input da console viene mandato a scanf solo quando viene completata una linea e non che lavora sulle linee separatamente) è necessario inserire una riga non vuota per uscire dallo scanf se la stringa di formato finisce con uno spazio. Una piccola regola quindi: mai finire la stringa di formato con uno spazio.
grazie! la predo come legge universale
