2012-04-30 18 views
5

Sto usando Code Block con GNU GCC Compiler. E sto cercando questo codiceIncoerenza con printf

int number,temp; 

printf("Enter a number :"); 
scanf("%d",&number); 
temp = sqrt(number); 
printf("\n%d",sqrt(number)); //print 987388755 -- > wrong result 
printf("\n%d",temp); //print 3 -- > write result 

return 0; 

e in questo codice ci sono un risultato per valore di ingresso 10 è

987388755 
3 

cosa c'è di sbagliato in questo codice?

+0

Stai utilizzando il compilatore GNU GNU C? – tbert

risposta

10

sqrt restituisce un double:

double sqrt(double x); 

È necessario:

printf("\n%g",sqrt(number)); 
0

Cambio:

printf("\n%d",sqrt(number)); 

a:

printf("\n%g",sqrt(number)); 

Nota che sqrt() restituisce un double, non un int - il compilatore dovrebbe avvisarti di ciò, purché siano attivati ​​gli avvisi. per esempio. gcc -Wall ... (e se non si dispone di avvisi abilitati, è ora di iniziare a prendere l'abitudine).

6

L'utilizzo di un identificatore di formato errato in printf() richiama Undefined Behaviour. sqrt() restituisce doppio ma si utilizza %d.