Ejercicio de Structs, me da basura no se porque

Iniciado por palacio29, 14 Septiembre 2016, 16:35 PM

0 Miembros y 1 Visitante están viendo este tema.

palacio29

Hola

Tengo que hacer un ejercicio en el cual tengo que ingresar los valores de 3 cartas del juego de mesa "Truco", para eso me dan un struct predefinido y a partir de ahi tengo que hacer la carga. Luego con punteros, tengo que modificar todas las variables para que queden ordenadas.

La cuestion es que todavia no llegue a la parte de punteros y me quede solo en la parte de carga porque no me funciona.
Lo que hace la carga es obtener el numero de la carta, el valor y el palo.
Si encuentran algun error se los agradeceria.

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

typedef struct
{
int numero,valor;
char palo;
}
t_carta;


void CARGA(t_carta carta);

int main()
{
    t_carta carta1,carta2,carta3;
    CARGA(carta1);
    printf ("\nEl numero es %d  -  El Valor es %d  -  El Palo es %c",(carta1.numero),(carta1.valor),(carta1.palo));


    return 0;
}
void CARGA(t_carta carta)
{
    printf ("Ingrese el numero de la carta: \n");
    scanf("%d",&carta.numero);
    printf ("\nIngrese el palo:  E = ESPADA  || O = ORO || C = COPA || B = BASTO \n");
    carta.palo=getche();
    printf("\nIngrese el valor de la carta: \n 1 de espada = 10\n1 de Basto = 9\n7 Espada = 8\n7 Oro = 7\n3 = 6\n2=5\n1=4\nFiguras=3\n7 Otro = 2\nLo Demas=1\n");
    scanf("%d",&carta.valor);
}




AlbertoBSD

El unico error que veo es el del scanf, que ... volvemos al Retorno de Linea que el scanf no procesa y lo termina agarrando el getche...

Cuanto ingresas un valor 10+Enter estas ingresando lo siguinte:

10\n\r

No recuerdo si es \n\r o \r\n el punto es que son 2 valores los que se manda cuando das un Enter

Entonces el Scanf procesa los números 10 y cuando detecta el primer caracter no numerico se detine y deja colgando un byte adicional en el buffer y este llega al getche y lo guarda en tu variable carta.palo

Entonces deberia de poner algo asi:

void CARGA(t_carta carta)
{
    printf ("Ingrese el numero de la carta: \n");
    scanf("%d",&carta.numero);
    getche(); //o getchar(); lo que quieras, es solo para que leas el byte mas que esta en tu buffer de entrada
    printf ("\nIngrese el palo:  E = ESPADA  || O = ORO || C = COPA || B = BASTO \n");
    carta.palo=getche();
    printf("\nIngrese el valor de la carta: \n 1 de espada = 10\n1 de Basto = 9\n7 Espada = 8\n7 Oro = 7\n3 = 6\n2=5\n1=4\nFiguras=3\n7 Otro = 2\nLo Demas=1\n");
    scanf("%d",&carta.valor);
}


Saludos!
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW