Underc0de

Foros Generales => Dudas y pedidos generales => Mensaje iniciado por: marcoam en Noviembre 16, 2013, 10:37:29 AM

Título: [SOLUCIONADO] Dos dudas en C
Publicado por: marcoam en Noviembre 16, 2013, 10:37:29 AM
Hola muy buenas compañeros he empezado a aprender C y me ha surgido una duda:

La primera es que he creado una estructura

struct empleados{
     char nombre[50];
     int dni;
     int sueldo;
}empleado;


Y el problema es que al hacer fgets a un archivo uno de los datos pasa a una variable definida en el main llamada tambien char nombre [50] y cuando quiero pasar los datos recogidos en nombre a empleados.nombre me pone error: incompatyble types when asigning 'char [50]' from *char

La segunda duda es que cuando quiero definir una funcion en la que me piden como parametros un puntero que hace fopen a un archivo y otro parametros qie es struct
es readUsers(char file[],struct User users[])
Aqui el problema es que no se como pasar los parametros porque en file[] no se si poner solo el punter  o file[puntero] ni se como usarlo dentro de la funcion , y la struct me confunde lo de Users user si me podeis  poner un ejemplo.lo entenderia mejor Muchas gracias de antemano si os parece dudoso mi forma de explicarme decidmelo e intentare explicarme mejor que ahora estoy en el movil y no puedo escribir bien
Título: Re:Dos dudas en C
Publicado por: Juan en Noviembre 16, 2013, 10:49:48 AM
Usa esta funcion para pasar datos nombre a empreado.nombre:

http://www.cplusplus.com/reference/cstring/strcpy/

strcpy((char*)empleado.nombre,(char*)nombre);

De todas formas te recomiendo que leas directamente a empleado.nombre envez de leer nombe y luego copiarlo:

#include <stdio.h>

struct Empleado
{
    char Nombre[50];
    int DNI;
    int Sueldo;
};

int main()
{
    struct Empleado usuario;

    printf("Nombre: ");
    scanf("%s",usuario.Nombre);

    printf("El nombre del empreado es %s\n",usuario.Nombre);

    return 0;
}


La segunda:

funcion(FILE * handle,struct empreado usuario)
Título: Re:Dos dudas en C
Publicado por: marcoam en Noviembre 16, 2013, 11:25:22 AM
Y como tendria que hacer para usar los parametros dentro de las llaves dentro de la funcion al dwfinirla
Como aun soy novato me confunden los [ ]
Título: Re:Dos dudas en C
Publicado por: Juan en Noviembre 16, 2013, 11:35:37 AM
Como que los parametros dentro de las llaves? las llaves indican que es un array. Para ver lo que contiene x posicion del array solo tienes que hacer array[posicion] ej array[0] te devuelve el primer elemento del array.

Pon el codigo que tienes y di que es lo que no sabes en el codigo que te vamos a entender mejor.

Título: Re:Dos dudas en C
Publicado por: marcoam en Noviembre 16, 2013, 01:08:55 PM
me refiero a cuando la defines yo de momento solo tengo

int ReadUsersFromFile([color=yellow]char file[],struct usuarios users[][/color]){
   
    [color=red]file[][/color]=fopen("datos_usuarios.dat","r");
   
}


esto es lo que no se usar  :P
Título: Re:Dos dudas en C
Publicado por: Juan en Noviembre 16, 2013, 01:39:57 PM
No puedes llamar a una variable de la misma forma que un parametro de la funcion, por otra parte para pasar cadenas a funciones no es char variable[] es char * variable.

Con fopen lo que te retorna es un handle tipo FILE por eso esa linea seria asi: FILE * archivo = fopen("datos_usuarios.dat","r");

un saludo!
Título: Re:Dos dudas en C
Publicado por: marcoam en Noviembre 16, 2013, 01:54:15 PM
Ya entiendo solo una ultima pregunta, tengo un struct creado y quiero pasarlo como segundo parametro de una funcion al invocarla desde el main()

typedef struct{
    char nombre[10];
    char clave[8];
    int id;
    int permisos;
    int numero_de_usuario;
}User;

int readUsersFromFile(char* file, [color=red]struct User users[][/color]){
   
   
}

main(){
FILE*datos=fopen("datos_usuarios.dat","r");
readUsersFromFile(datos, [color=red]no se que tengo que poner aqui[/color]);
}


No se como debo hacer para invocar la funcion con el struct User como parametro. Gracia :)
Título: Re:Dos dudas en C
Publicado por: Juan en Noviembre 16, 2013, 02:34:33 PM
Andas muy verde,,, tu codigo seria mas o menos asi:

typedef struct{
    char nombre[10];
    char clave[8];
    int id;
    int permisos;
    int numero_de_usuario;
}User;

int readUsersFromFile(char* file, struct User users){
   
   
}

main(){
struct User usuario;
FILE*datos=fopen("datos_usuarios.dat","r");
readUsersFromFile(datos, usuario);
}


Te recomiendo que te leas esto antes de hacer mas preguntas  :)

http://www.elrincondelc.com/cursoc/cursoc.html

Veras como te soluciona muchas dudas!