[c] dubbio funzionamento scanf

frab1
Buongiorno,
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.. :shock:
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 :cry:

Risposte
vict85
Che compilatore stai usando? Il codice che hai scritto tu non dovrebbe comportarsi come dici.

frab1
"vict85":
Che compilatore stai usando? Il codice che hai scritto tu non dovrebbe comportarsi come dici.


gnu GCC su ubuntu

vict85
Se togli il ‘\n’ dovrebbe funzionare. Dovrei ragionarci sopra sul perché si comporta così.

frab1
si togliendo il \n funziona! ma chissà mai perchè...grazie mille!

apatriarca
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.

frab1
grazie! la predo come legge universale :-)

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.