Scanf/Printf doppia variabile C

Scanf/Printf doppia variabile C


Diciamo che ho questo seguente bit di codice in C:


double var;
scanf("%lf", &var);
printf("%lf", var);
printf("%f", var);

Legge dalla variabile stdin 'var' e quindi stampa due volte in stdout 'var'.
Capisco che è così che leggi una doppia variabile da stdin, ma le mie domande sono:



  1. Perché puoi stampare un doppio con %lf?

  2. Perché puoi stampare un doppio con %f?

  3. Quale è meglio e corretto da usare?


Risposte:


Per funzioni di argomenti variabili come printf e scanf , gli argomenti vengono promossi, ad esempio, tutti i tipi interi più piccoli vengono promossi a int , float è promosso a double .


scanf accetta parametri di puntatori, quindi la regola di promozione non ha effetto. Deve usare %f per float* e %lf per double* .


printf non vedrà mai un float argomento, float è sempre promosso a double . L'identificatore di formato è %f . Ma C99 dice anche %lf è lo stesso di %f in printf :