¡Ayuda en C!

Estoy desesperado, parece facil a simple vista, pero en cada ejercico tengo que estar horas cambiando cosas, hasta que el programa por fin funciona. O, como muchas veces me pasa, funciona pero mal.

El ejercicio que me tienen ahora por la calle de la amargura es este " pedir tres numeros y mostrarlos en pantalla de mayor a menor ". Estoy en la unidad donde explica los if, if else y swicth, así que con alguna de estos hay que hacerlo. Yo he usado el if/else. Bueno, pues lo hago y o no funciona ( si no pongo else) o segun que numero sea el mayor de los tres me da el orden repetido; uno con los numeros ordenados y otro con el orden que al programa le parece.

Por ejemplo, esta chapuza es la que mejor me ha ido;

#include
#include

main ()

{
int a, b, c;

printf ("Introduzca el valor de a:\n");
scanf ("%d",&a);
printf ("Introduzca el valor de b:\n");
scanf ("%d",&b);
printf ("Introduzca el valor de c:\n");
scanf ("%d",&c);

if (a >= b )
{
if ( a >= b > c)
{
printf ("El orden de mayor a menor es de:\n");
printf ("A:%d \nB:%d \nC:%d",a,b,c);
}
if (a >= c > b)
{
printf ("El orden de mayor a menor es de:\n");
printf ("A:%d \nC:%d \nB:%d",a,c,b);
}
else
{
printf ("El orden de mayor a menor es de:\n");
printf ("A:%d \nB:%d \nC:%d",a,c,b);
}
}
if (b >= a)
{
if (b >= a > c)
{
printf ("El orden de mayor a menor es de:\n");
printf ("B:%d \nA:%d \nC:%d",b,a,c);
}
if (b >= c > a)
{
printf ("El orden de mayor a menor es de:\n");
printf ("B:%d \nC:%d \nA:%d",b,c,a);
}
else
{
printf ("El orden de mayor a menor es de:\n");
printf ("B:%d \nC:%d \nA:%d",b,c,a);
}
}
if (c >= a)
{
if (c >= a > b)
{
printf ("El orden de mayor a menor es de:\n");
printf ("C:%d \nA:%d \nB:%d",c,a,b);
}
if (c >= b > a)
{
printf ("El orden de mayor a menor es de:\n");
printf ("C:%d \nB:%d \nA:%d",c,b,a);
}
else
{
printf ("El orden de mayor a menor es de:\n");
printf ("C:%d \nB:%d \nA:%d",c,b,a);
}
}
getch ();
}


con a : 17, b : 12 y c : 22, por ejemplo, me pasa lo del orden duplicado, y con a: 17 b : 22 y c: 12 directamente me da un orden erroneo b/c/a

Lo he intentado de otras maneras, siempre usando if, pero la mayoria de las veces el programa me decia cosas como "confused by earlier errors, bailing out" o "character constant too long". Y todo esto con el primer ejercicio del capitulo, ahora esoty haciendo el segundo y ya me esta dando errores... [mamaaaaa]

¡AYUDA POR FAVOR! :(

Salu2
No te compliques tanto la vida utiliza un array
guarda los números en el array con un bucle
despues los ordenas y los imprimes con otro bucle.

De esta forma cambiando el limite podras hacer el progrma para
más de 3

int compara (void *a,void *b){
return ((int *)*a-(int *)*b);
}

int main (void){
int i,n[4];

for (i=0;i<3;i++){
printf ("Introduzca el valor de :\n");
scanf ("%d",&n[i]);
}

//ordenamos
qsort (n,sizeof(int),compara,3);
//la sintaxis del qsort no la tengo a mano
//asi que el orden de los paramatros no es el correcto
//si lo prefieres implementa tu la ordenación con el
//metodo que quieras bastante más recomendable

for (i=0;i<3;i++){
printf ("%d ",n[i]);
}
printf ("\n");

}
PD: el codigo es muy dificil de leer sin sangrado pero yo
diria que te faltan algunos 'else'.

La manera más burra (pero infalible) es pensar en todos los ordenes

a b c
b c a
c a b
b a c
a c b

y empezar

if ( (a <= b ) && (b <= c)){
printf (" a b c \n" );
}else if (....){

}

etc etc

pero aparte de cansado es muy cutre.
gracias por la ayuda Harl. Lo de void todavia no lo he dado, ya se que lo que he hecho es un poco chapuza, pero es que es mi segunda leccion de C despues del printf y el scanf :P . Al final lo voy ha hacer de la manera "burra". [oki]

Una pregunta ¿es totalmente necesario poner un else despues de unos cuantos if? Es que si lo pongo me hace cosas raras como darme respuestas duplicadas ( una la correcta y otra con lo que he puesto en el else), y si no lo pongo me da error al compilar.

Salu2 [bye]
ya sabes if (condicion){
}else
sentencia

o
if (condicion){
}else {
sentencias
}

o incluso

if (condicion){
}else if (condicion){
sentencias
}

cuando el compilador te da es tipo de errores es porque
te has olvidado alguna llave


Si no pones un else despues del if cambia el significado y te
pueden ocurrir cosas como que te salgan dos printf
en el ejemplo que yo te he puesto eso ocurriria si por ejemplo
pones 3 números iguales (entraria en todos los if)
por eso se ponen los elses. Pero ten en cuenta que es una
solución muy cutre porque repites comparaciones.
5 respuestas