Primero, puede que no te responda por un tiempo, por que acabo dar de baja a internet y no voy a poder acceder al mismo.
Pero creo que estas equivocado en tu forma de programar. Si programas algo es para que luego lo puedas reutilizar, y solo cambias aquello que es especifico al proyecto.
Por eso mismo en el anterior hilo yo hice una funcion que se llama "get_String" la cual lo unico que hace es.. Tomar el string, limpiarlo y devolver eso. Nada mas.
Si por algun motivo yo tengo que agregar otro campo, suponete que sea "Lugar de Nacimiento" yo no tengo que modificar get_String para acomodar esto nuevo, simplemente vuelvo a utilizar el mismo codigo.
Codigo al que hago referencia:
http://www.todopic.com.ar/foros/index.php?topic=47256.msg394038#msg394038Como era un programa corto, lo referente y exclusivo al proyecto era lo que estaba en el main, Yo podia ver en el main que sucedia en todo el proyecto:
- Lo que se imprime en pantalla
- Lo que pido (Numero o string)
- En caso de que se reporte algun error que imprimir.
Actualmente lo que intentas hacer es un codigo que resulta muy dificil luego de modificar, te vas a pasar el tiempo tratando de agregar algo. Y lo peor es que lo va a hacer menos legible para cualquiera que lo lea.
De todas formas te doy una especie de respuesta para tu pregunta aca.
Cuando queres hacer cosas asi, es muy dificil tratar de recorda cual es el 0, cual es el 1, cual es el 2, etc. Asi que lo mejor es darle nombres, pero tenes que pasar numeros...
Para eso podemos usar
- el ENUM, es como "darle nombre a los numeros"
- Define
#define NOMBRE 0 // Nombre va a tener el valor 0, por que nosotros se lo pedimos
#define DIRECCION 1 // Direccion va a tener el valor 1, continuando lo anterior o si le ponemos el igual le asignamos un valor
const char * TiposString[]={"el nombre","la direccion"}; //Verificar que esa linea sea correcta!
void get_String( char *strNomDir, int max, int iden ){
int ok, i=0, j=0, espacios=0, espIzquierda=0;
// Proteccion de valores
if(iden >= sizeof TiposString) // Verificar que esta linea sea correcta. Creo que le falta ser dividido por sizeof(char *), la idea es que tenga un 2 alli, es decir: iden >= 2
{
//Error no se dio ni nombre ni direccion
return 0;
}
do{
ok=1;
printf("\n Ingresa %s del alumno [%d]......:", TiposString
[iden
], max
+1);
Otra cosa mas, utiliza nombres que identifiquen las variables, por mas que sean un poco mas largas, usualmente los IDEs con CTRL + Espacio te dan las opciones de autocompletado.
Cualquier se podria confundir creyendo que iden e iDen son iguales, pero C es case sensitive.
-----------
La otra para no pasar eso en un parametro es modificar la estructura para que contenga el tipo
typedef struct {
char texto[30];
int tipo;
} texto_t;
typedef struct{
texto_t nombre;
texto_t direccion;
int edad;
}alumno;
y podrias usarlo:
get_String( (ptrAlumno+max)->nombre, max);
void get_String( texto_t * NomDir, int max){
int ok, i=0, j=0, espacios=0, espIzquierda=0;
do{
ok=1;
printf("\n Ingresa %s del alumno [%d]......:", TiposString
[NomDir
->tipo
], max
+1);
// Para acceder/guardar al texto es:
NomDir->texto
Aunque sigo pensando que ante un cambio se hace demasiado dificil.
Y aunque no le agregues ningun cambio, de todas formas se hace dificil el leerlo, me refiero a que te tenes que pasar un buen tiempo leyendolo para entenderle