2012-04-30 13 views
5

Estoy usando Code Block con GNU GCC Compiler. Y estoy tratando de este códigoInconsistencia usando 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; 

y en este código no son un resultado de valor de entrada 10 se

987388755 
3 

lo que está mal en este código?

+0

¿Está utilizando el Compilador GNU GNU C? – tbert

Respuesta

10

sqrt devuelve un doble:

double sqrt(double x); 

Es necesario:

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

Cambio:

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

a:

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

Tenga en cuenta que sqrt() devuelve un double, no un int - su compilador debería advertirle sobre esto, siempre y cuando tenga advertencias habilitadas. p.ej. gcc -Wall ... (y si no tiene advertencias habilitadas, entonces es hora de comenzar a hacer un hábito).

6

El uso de especificador de formato incorrecto en printf() invoca Undefined Behaviour. sqrt() devuelve el doble pero usa %d.