Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Punteros y Macros

Estas en el tema de Punteros y Macros en el foro de C/C++ en Foros del Web. Necesito que al ejecutar pueda ordenar de cuantos miembros de la marina quiero ingresar datos, pero me sale un error que no entiendo muy bien, ...
  #1 (permalink)  
Antiguo 15/06/2012, 15:10
 
Fecha de Ingreso: junio-2012
Mensajes: 1
Antigüedad: 10 años, 5 meses
Puntos: 0
Pregunta Punteros y Macros

Necesito que al ejecutar pueda ordenar de cuantos miembros de la marina quiero ingresar datos, pero me sale un error que no entiendo muy bien, no se donde esta la falla realmente...



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

int Getline(char s[], int lim)
{
int c, i;

for((i = 0); ((i < lim - 1) && (c = getchar()) != '\n' && c != '\0'); ++i)
s[i] = c;
if(c == '\n')
{
s[i] = c;
++i;
}
s[i] = '\0';

return i;
}
//http://espanol.answers.yahoo.com/question/index?qid=20060906085934AAIQD8I
enum Rangos{Almirante=1, ViceAlmirante, ContraAlmirante, CapitanNavo, CapitanFragata, CapitanCorbeta, TenienteNavo, TenienteFragata, TenienteCorbeta, MaestrePrimero, MaestreSegundo, MaestreTercero, Cabo, Soldado};

typedef struct{
enum Rangos Rango;
char Nombre [20];
char Apellido[20];
char Edad[2];

}MiembroFFAA;


typedef MiembroFFAA *Marin;

#define Estruct_escribir_NombreCampo_cadena(estructura,Cam po,Dato)(strcpy(estructura.Campo,Dato))
#define Estruct_leer_NombreCampo(estructura,campo)(estruct ura.campo)
#define Estruct_escribir_NombreCampo_numero(estructura,Cam po,valor)(estructura.Campo=valor)

#define Estruct_Escribir_NombreCampo_Cadena(Ptr,Campo,Dato )(strcpy(Ptr->Campo,Dato))
#define Estruct_Leer_NombreCampo(Ptr,Campo)(Ptr->Campo)
#define Estruct_Escribir_NombreCampo_Numero(Ptr,Campo,Valo r)(Ptr->Campo = Valor)
//#define Estruct_requerir_Campo(estructura,campo)(char Opcion[20]; printf ("%s", "Escriba el nombre"); scanf("%s", Opcion); Estruct_escribir_NombreCampo_cadena(estructura,cam po, Opcion);)

main()
{
unsigned int Indice = 0;
unsigned int ControlLectura = 0;
unsigned int IndiceLectura = 0;
char CadenaCapturada[40];
int EnteroCapturado;
char Usuario[30];
enum Rangos RangoAuxiliar;
char Continuar='s';



int Marin;
int *N;
printf("Ingrese el numero de marines: ");
scanf("%d", &Marin);
N = (int *)malloc(Marin*sizeof(int));
//http://todocporelinv.blogspot.com/2011/04/malloc-y-free-en-dev-c-por-elinv.html



printf ("%s\n", "================================================= =============");
printf ("%s\n", "=== ===");
printf ("%s\n", "=== TAXONOMIA: MIEMBROS DE LA FUERZA NAVAL ===");
printf ("%s\n", "=== ===");
printf ("%s\n\n\n", "================================================= =============");

printf("%s ","Ingrese Nombre de Usuario: ");
scanf("%s", Usuario);
fflush(stdin);
printf ("\n\n\n");

for(Indice= 0; Indice < 10 && Continuar=='s'; Indice++)
{
printf ("%s %s %d\n",Usuario," Ingrese los datos del Marin No. ",Indice);

printf("%s %d %s" ," => NOMBRE del Marin ",Indice, ": ");
Getline(CadenaCapturada,40);
Estruct_Escribir_NombreCampo_Cadena(Marin[Indice],Nombre,CadenaCapturada);

printf("%s %d %s" ," => APELLIDO del Marin ",Indice, ": ");
Getline(CadenaCapturada,40);
Estruct_Escribir_NombreCampo_Cadena(Marin[Indice],Apellido,CadenaCapturada);

printf("%s %d %s" ," => EDAD del Marin ",Indice, ": ");
Getline(CadenaCapturada,40);
Estruct_Escribir_NombreCampo_Cadena(Marin[Indice],Edad,CadenaCapturada);

printf("%s %d %s" ,"RANGO del Marin ",Indice, "Segun estas Opciones \n1.Almirante\n2.ViceAlmirante\n3.ContraAlmirante\ n4.CapitanNavo\n5.CapitanFragata\n6.CapitanCorbeta \n7.TenienteNavo\n8.TenienteFragata\n9.TenienteCor beta\n10.MaestrePrimero\n11.MaestreSegundo\n12.Mae streTercero\n14.Cabo\n15.Soldado: ");
scanf("%d",&RangoAuxiliar);
fflush(stdin);

ControlLectura++;

printf("%s ","Desea Continuar Ingresando Datos? (s/n) =>");
Continuar=getchar();
while(Continuar!='s' && Continuar!='n')Continuar=getchar();
fflush(stdin);
system ("cls");
}
printf("%s ","Desea Imprimir Los Datos Guardados? (s/n)") ;
Continuar=getchar();
while(Continuar!='s' && Continuar!='n')Continuar=getchar();
fflush(stdin);
system ("cls");

for(IndiceLectura=0;IndiceLectura<ControlLectura && Continuar=='s';IndiceLectura++){
printf("%s %d %s","Datos del Marin No. ",IndiceLectura,"\n");
printf("%s ", "NOMBRE:");
printf ("%s\n",Estruct_Leer_NombreCampo(Marin[IndiceLectura],Nombre));
printf("%s ", "APELLIDO:");
printf("%s\n" ,Estruct_Leer_NombreCampo(Marin[IndiceLectura],Apellido));
printf("%s ","EDAD:");
printf("%s\n",Estruct_Leer_NombreCampo(Marin[IndiceLectura],Edad));
printf("%s","RANGO No. ");
printf("%d\n",Estruct_Leer_NombreCampo(Marin[IndiceLectura],Rango));
printf("\n");
};

system("PAUSE");
}
  #2 (permalink)  
Antiguo 15/06/2012, 22:04
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 11 años
Puntos: 94
Respuesta: Punteros y Macros

Hola! No tenes un error tenes varios errores...
Código C:
Ver original
  1. int Marin;
  2. int *N;
  3. printf("Ingrese el numero de marines: ");
  4. scanf("%d", &Marin);
  5. N = (int *)malloc(Marin*sizeof(int));
1º en este pedazo de codigo, seguro sabes lo q haces??? aca estas creando una arreglo de tamaño Marin, pero para q queres un arreglo de int? Ademas esta mal llamar a tu variable de la misma manera que lo haces con el typdef

2º Otra cosa q veo mal es esto:
Código C:
Ver original
  1. Estruct_Escribir_NombreCampo_Cadena(Marin[Indice],Nombre,CadenaCapturada);
le pasas como segundo argumento Nombre, pero ¿que es nombre? en ningun lado definis eso

3º en este for de getline
Código C:
Ver original
  1. for((i = 0); ((i < lim - 1) && (c = getchar()) != '\n' && c != '\0'); ++i)
esta mal la condicion c!='\0', ya que ese caracter no lo podes ingresar por teclado. Tiene que ser c!=EOF

No soy un experto manejando macros, pero me parece q estan mal empleadas. Si no la tenes muy clara con el manejo de las estructuras te recomiendo que saques esas macros y trabajes sin ellos; haber q sale

Saludos
  #3 (permalink)  
Antiguo 16/06/2012, 10:35
 
Fecha de Ingreso: noviembre-2006
Mensajes: 166
Antigüedad: 16 años
Puntos: 6
Respuesta: Punteros y Macros

¿Qué tanta diferencia hay entre C y C++? Sólo he podido ver de nuevo al printf, en vez del cout (en nuestro primer ciclo están enseñándonos acerca de esto, pero son aún cosas básicas, como el uso de estructuras múltiples, condicionales, estructuras repetitivas, y usar éstas para crear vectores y matrices, subprogramas...).
  #4 (permalink)  
Antiguo 16/06/2012, 12:13
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 11 años
Puntos: 94
Respuesta: Punteros y Macros

Cita:
¿Qué tanta diferencia hay entre C y C++?
Hay bastante diferencia, C++ es un lenguaje POO... con respecto a lo basico que mencionas, sí en ambos son iguales la mayoria de las cosas, pero lo que en C se puede hacer en C++ se puede implementar de otra manera... no me meto mas xq nose mucho de C++, igual no te qdes con el C es igual a C++

Saludos

Etiquetas: estructura, estructuras, macro, macros, puntero, punteros
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:01.