C/Visual C - Problemas con struct i funciones

 
Vista:

Problemas con struct i funciones

Publicado por arcadi2008 (1 intervención) el 10/04/2010 12:55:15
Buenas a todos,

soy un principiante en C y tengo un problema con crear struct y utilizarlas para funciones. Me dice error cuando defino las estructuras y no se que pasa...

Tengo que crear una struct en el programa principal, esta estructura tiene nombres de usuarios que estan dados de alta, los puertos y las IPs. El que pasa es que me dice error cuando defino las estructuras y no encuentro el error.

En el programa tengo que coger por el teclado el nombre de usuario y mirar si esta de alta en el servidor (y si estan dados de alta actualizo los datos), para esto tengo una funcion que es:

Código:

int USUARIO_ALTA( char nombre_usuario[], int longitud_nombre, int Puerto_TCP, char usuario_ip[], tengo que passar la estructura para que se modifique y actualize los datos);

devuelve 0 si ok o -1 si el usuario no esta dado de alta

Como tengo que pasar la estructura dentro la funcion para que se modifique (parametro de entrada y salida)?

En grandes rasgos el programa es:

Código:

void main () {

//Definimos las estructuras

struct USUARIOS_ALTAS {
#define Altas 2 //Nº de usuarios dados de alta
char Usuarios [Altas] [10] = {"Javier","Manuel"}; //Nombre de usuarios
char longUsuarios [Altas] = {6, 6}; //Longitud de los nombres
int Port_Usuarios [Altas] = {0,0}; //Puerto que estan connectador
unsigned long IP_Usuarios [Altas]; //Ip que estan connectador
};


//Creamos las variables

struct USUARIOS_ALTAS usuarios_altas;
char nombre_usuario [10];
int longitud_nombre;
int Puerto_TCP;
char usuario_ip [16];

****COGEMOS LOS DATOS****

USUARIO_ALTA( nombre_usuario[], longitud_nombre, Puerto_TCP, usuario_ip[], **tengo que passar la estructura para que se modifique y actualize los datos (parametro entrada/salica [¿Como lo hago?])**);

}


1- Problema: Como defino la estructura, me sale incorrecta..
2- Problema: ¿Como escribo para que la estructura sea un parametro de entrada/salida en la funcion?

Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problemas con struct i funciones

Publicado por Capitan Kirk (97 intervenciones) el 13/04/2010 09:02:00
Te puedo sugerir algunas cosillas:

1. No declares macros (#define ... ) dentro de la definicion de la estructura de datos.
2. No inicies variables en la definicion de la estructura de datos.
3. Al declarar cadenas de caracteres, hazlo en funcion de la maxima longitud de cadena que esperes. Ten en cuenta que el indicador de fin de cadena (codigo ASCII 0) tambien forma parte de la cadena.
4. No necesitas guardar la longitud de la cadena, la libreria estandar tiene una funcion que te devuelve ese valor.

Tu estructura de datos podria quedar:

struct USUARIO_STRUCT {
char nombre[20];
int puerto;
char ip_usuario[20];
};

Para pasar la estructura como parametro a una funcion, y modificarla dentro de esa funcion, tendras que pasarla por referencia, es decir, pasar su direccion.

El prototipo de la funcion seria, por ejemplo:

void alta_usuario(struct USUARIO_STRUCT *usuario); // Debera estar despues de la declaracion de la estructura

La implementacion de la funcion seria, por ejemplo:

void alta_usuario(struct USUARIO_STRUCT *usuario)
{
printf("Nombre usuario: ");
gets(usuario->nombre);
printf("Puerto: ");
scanf("%d", usuario->puerto);
printf("IP_usuario: ");
gets(usuario->ip_usuario);
}

Y tu funcion main quedaria algo asi como:

#define ALTAS 2

void main(void)
{
int i;
struct USUARIO_STRUCT mi_usuario[ALTAS];
for (i=0; i<ALTAS; i++)
alta_usuario(&mi_usuario[i]);
// etcetera...
}

Busca un buen libro de C y aprende a dominar los punteros, estructuras y operadores de direccion e indireccion.
No suelen ser faciles de entender para principiantes, pero son vitales en cuanto quieres ir mas alla de programas muy sencillos.

Saludos,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar