tengo un problema conestructuras con arreglos !!!!

Iniciado por matrixsystem, 11 Diciembre 2015, 22:35 PM

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

matrixsystem

lo que pasa es que tengo que hacer un programa que me imprima  un numero un nombre y otro numero las veces que el usuario desee  lo estoy haciendo con estructura peor no me sale y  no se cual es mi error se supone que todo esta bien este es mi codigo  el programa se debe de detenr hasta que el usuario ponga en los datos ingrados un 0 en cada dato   
ESPERO QUE ME AYUDEN !!!!

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



struct matrix_x{   
   int kick;
   int kick2;
   char nombre[10];
   struct  matrix_x *psiguiente;
};
struct matrix_x *pprimero;
  struct  matrix_x *pultimo;
 
 
  int i=0;

void insertar (int dato ,char nombre[   ] ,int codigo)
  {
   
      struct  matrix_x * paux  ;
   paux=(struct matrix_x*)malloc(sizeof (struct  matrix_x));   
if (paux==NULL)
      {
         
      printf("error en la memoria ");
         }
      else
      {
   
         paux->kick  =dato;
         paux->kick2 = codigo;
      paux->nombre=nombre;
   paux->psiguiente =NULL;
if (pprimero==NULL)
{
   pprimero=paux;
        pultimo=paux;
   
}
else
{
   
   pultimo->psiguiente =paux;
   pultimo=paux;
}
         }
      
         i++;
      }
      
      
      void mostrar ()
      {
         
         
         struct matrix_x *aux;
         aux=(struct matrix_x*)malloc(sizeof (struct  matrix_x));   
         aux=pprimero;
         int i=0;
         while (aux!=NULL){

         printf ("\n dato___%d       codigo___%d  ",aux->kick,aux->kick2);
              fflush(stdin);
            printf ("\n  nombre %s    ",aux->nombre);
               fflush(stdin);
            aux=aux->psiguiente;
i++;      
         }
         }
      
      int main()
      {
         
         int cx=0;
         int dato,codigo;
   char  nombre[10];
         printf ("introduzca cero para ocntinuar\n ");
         while(dato!=0 && codigo!=0 && nombre!=0)
         {
         
            fflush(stdin);
            printf ("dame dato_%d____",cx);
      scanf ("%d",&dato);
                     printf ("dame codigo_%d___",cx);
      scanf ("%d",&codigo );
               printf ("dame nombre _%d___",cx);
               fflush(stdin);
         scanf ("%s",&nombre[cx] );
            insertar(dato,nombre,codigo);
         cx=cx+1;
            }
         mostrar();
         printf ("haz salido del programa");
         
         
      }

MAFUS

Muy buenas.

#include<conio.h>
// conio.h no es una libreria estandar y no funcionara en todos los compiladores.
// ademas no usas ninguna de sus funciones.
#include<stdio.h>
#include <stdlib.h>

struct matrix_x {   
int kick;
int kick2;
char nombre[10];
struct  matrix_x *psiguiente;
};

struct matrix_x *pprimero;
struct matrix_x *pultimo;
int i = 0; // Una variable global que no usas

void insertar (int dato, char nombre[], int codigo) {

struct  matrix_x * paux;

paux = (struct matrix_x*)malloc(sizeof(struct  matrix_x));   

if(paux == NULL)
{         
printf("error en la memoria ");
}
else
{
paux->kick = dato;
paux->kick2 = codigo;
paux->nombre = nombre; // Debes los datos, no la direccion de los datos -> strncpy(paux->nombre, nombre, 10);
paux->psiguiente = NULL;

if (pprimero == NULL)
{
pprimero = paux;
pultimo = paux;   
}
else
{
pultimo->psiguiente = paux;
pultimo = paux;
}
}
i++;
}

void mostrar () {
struct matrix_x *aux;
aux = (struct matrix_x*)malloc(sizeof (struct  matrix_x)); // Esta linea no la necesitas
aux = pprimero; // pues aqui haces que aux apunte a pprimero abandonado la memoria apuntada anteriormente. Malo porque hay memoria asignada que no podras recuperar.
int i = 0; // ocultas la variable i global
while (aux != NULL){
printf ("\n dato___%d       codigo___%d  ",aux->kick,aux->kick2);
fflush(stdin); // fflush espera un flujo de salida. Esto no funcionara en todos los compiladores o SS.OO.
printf ("\n  nombre %s",aux->nombre);
fflush(stdin); // otra vez el mal uso de fflush
aux = aux->psiguiente;
i++; // incrementas i local, pero no la usas
}
}
     
int main() {
int cx = 0;
int dato, codigo;
char  nombre[10];
printf("Introduzca cero para continuar\n"); //
while(dato != 0 && codigo != 0 && nombre != 0) {
fflush(stdin); // otra vez el mal uso de fflush
printf ("dame dato_%d____",cx);
scanf ("%d",&dato);
printf ("dame codigo_%d___",cx);
scanf ("%d",&codigo );
printf ("dame nombre _%d___",cx);
fflush(stdin); // otra vez el mal uso de fflush
scanf ("%s",&nombre[cx] ); // varios fallos aquí -> scanf("%s", nombre);
insertar(dato,nombre,codigo);
cx=cx+1; // mas correcto usar ++cx. Por otra parte enganas al usuario, pues aunque insertar falle
// al adquirir memoria con malloc y no introduzca el dato, incrementas cx sin que el dato
// anterior se haya introducido, falseando asi el numero de datos introducidos.
}
mostrar();
printf ("has salido del programa");
// deberias incluir una función para liberar la memoria
// que has adquirido con cada uno de los malloc en insertar.

// main debe devolver un valor: el S.O. espera que devuelva 0 si el programa ha terminado con exito.
}

matrixsystem

 :D vaya gracias me has ayudado con mi problema te lo agradezco ya decia yo jjaja si apenas empiezo pero esta bien que buen que es que bueno  personas que saben mas que yo muchas gracias