Problema en C

B

Buenas estoy intentando hacer, una calculadora para resolver ecuaciones de 2º grado incompleta del tipo ax2+bx=0 para practicar un poco, peor me ha surgido un problema, que al definir "be" en vez d eponer le numero que e insertado, pone 4206596, a continuacion pongo el codigo a ver si alguien me puede ayudar.

=========================

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(int argc, char *argv[])
{
double a;
double be;


printf( "Introduce el valor de a\n" );
scanf( "%d", &a);
printf( "Introduce el valor de b\n" );
scanf( "%d", &be );
printf( "x (%d x + %d ) = 0\n", a, be );
printf( "%d x + %d = 0\n", a, be );
double resultado = -a/be;
printf( "Esta ecuacion tiene dos soluciones\n" );
printf( "x = %d \n", resultado );
printf( "x = 0\n" );


system("PAUSE");
return 0;
}

Carcass

Pon un fflush(); antes de cada scanf

IS4kO

es que la variable resultado es di tipo double y en la impresion, pones %d que era para enteros.

printf( "x = %d \n", resultado );

P.D: ¿No?

B

carcass me podrias explicar eso del fflush ? :s

IS4K0 si esta definida

printf( "%d x + %d = 0\n", a, be );
double resultado = -a/be;
printf( "Esta ecuacion tiene dos soluciones\n" );

IS4kO

es verda lo de la definicion no me di cuenta. he editado la respuesta :)

Carcass

Con el scanf vas cogiendo valores del buffer de teclado, pero no quita los retornos de carro cuando lee datos.

Con fflush le dices que vacíe el buffer antes de volver a pedir datos al usuario y el segundo número lo coge bien...

B

peor como se usa exactamente? si me lo puedes decir como se usa mejor que mejor :D

L

da igual el flush los cogeria igual xq el buffer es un contenedor para un solo dato en ese caso. En cuanto mete el segundo se actualiza el buffer.

B

#8 entonces donde tengo el fallo? :s

BlasterN

limpia la entrada por teclado antes de leer
fflush(stdin);

antes de cada scanf

si falla esto: double resultado = -a/be;
ponlo así.

double resultado = (double) ((a-2*a)/be);

LOc0

El fflush(stdin) se usa cuando lees caracteres. En este caso, NO HACE FALTA.

Usa %f para el printf de números double.

Salu2 ;)

B

ya me funcion, si a alguien le interesa, aquí pongo el codigo:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(int argc, char *argv[])
{
int a;

int be;


printf( "Introduce el valor de a\n" );
fflush( stdin );
scanf( "%i", &a);

printf( "Introduce el valor de b\n" );
fflush( stdin );
scanf( "%i", &be );
printf( "x (%i x + %i ) = 0\n", a, be );
printf( "%i x + %i = 0\n", a, be );
int resultado = -a/be;
printf( "Esta ecuacion tiene dos soluciones\n" );
printf( "x = %i \n", resultado );
printf( "x = 0\n" );



system("PAUSE");
return 0;
}

aLeX

No es problema de la lectura, es un problema al escribir esta linea:

printf( "x (%d x + %d ) = 0\n", a, be );

Y se demuestra fácilmente. Antes de esa linea poneis un printf("%d",be); y veis como sale el valor de be...

Es algo muy raro, en mis tiempos no pasaban estas cosas :/

maRc

Podrías definir todas las variables al principio.

B

si ya me funciona bien gracias a todos los que me ayudaron :D

SouL

lo de #14 era clave xD

Carcass

#16 Era clave si usa un compilador que sólo sea de ANSI C, que ya casi no hay X)

maRc

Carcass, de toas formas queda más claro declarandolo todo al principio, que cada vez una cosa =P.

Carcass

Pues yo siempre he preferido declarar las variables cuando se empiezan a usar.

En métodos muy grandes es absurdo declararlas 100 líneas antes de usarlas X-)

Aunque, claro está... los métodos tan grandes se dividen en varios jeje

Usuarios habituales