Por cierto , por si están tentados a comentar el tema recursividad usada en el programa, no se molesten, tengo bastante claros los pros y contras ... en este caso la use solo para el ejemplo
Código
#include <stdio.h> #include <stdlib.h>//funcion malloc() //no debes usar nunca conio //#include <conio.h> // funcion getch() #include <string.h> // funcion strcpy() #define MAX_REG 2 //Define el maximo numero de registros //limpia el buffer #define LIMPIAR_BUFFER while(getchar() != '\n') // Primero definimos los tipos typedef struct registro1 { char concepto[30+1]; char RFC[21+1]; float monto; int mes; struct registro1* sig; }ingreso; int introduceRegistro(ingreso **pIngreso);//le pasamos el puntero original de la lista //agrega un elemento a la lista void addIngreso(ingreso **pIngreso , ingreso *aux ); //imprime el campo concepto de todos los elementos en la lista void imprimeConcepto(ingreso *pIngreso); int main() { ingreso *pIngreso = NULL; introduceRegistro(&pIngreso); return 0; } void addIngreso(ingreso **pIngreso , ingreso *aux ){ if(*pIngreso == NULL){ *pIngreso = aux; }else{ //llamamos recursivamente a la función addIngreso(&((*pIngreso)->sig) , aux); } } void imprimeConcepto(ingreso *pIngreso){ if(pIngreso != NULL){ imprimeConcepto(pIngreso->sig); } } int introduceRegistro(ingreso **pIngreso) { int i; //lo usamos para ir agregando la información ingreso *aux; for(i=0 ; i<MAX_REG ; i++ ){ LIMPIAR_BUFFER; LIMPIAR_BUFFER; //lo agregamos a la lista addIngreso(pIngreso, aux); } //mostramos el "concepto" de todos los campos imprimeConcepto(*pIngreso); return 0; }
Saludos