elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [AYUDA] Error con función cargar archivo.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [AYUDA] Error con función cargar archivo.  (Leído 2,802 veces)
Black cracker

Desconectado Desconectado

Mensajes: 11



Ver Perfil
[AYUDA] Error con función cargar archivo.
« en: 2 Septiembre 2015, 19:30 pm »

Hola gente.
Una duda, se me ha presentado un error en esta función dado que no funciona, jaja. Digamos que no me carga el archivo deseado, ayuda.  :huh: ;D

Acá la función:

Código:
void cargar(Ptrcomponente &listas){
string nombre;
int cantidad;
string fabricante;
int codigo;
Ptrcomponente nuevo;
FILE*Archivo;
fopen_s(&Archivo, "Base de datos.txt", "r+");
if (Archivo == NULL){ printf("ERROR"); }
else{
while (!feof(Archivo)){
fscanf_s(Archivo, "%s", &nombre);
fscanf_s(Archivo, "%i", &cantidad);
fscanf_s(Archivo, "%s", &fabricante);
fscanf_s(Archivo, "%i", &codigo);
nuevo = new(componentes);
nuevo->nombre = nombre;
nuevo->cantidad = cantidad;
nuevo->fabricante = fabricante;
nuevo->codigo = codigo;
nuevo->siguiente = NULL;
agregar(nuevo, listas);
}
}
fclose(Archivo);
}


En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: [AYUDA] Error con función cargar archivo.
« Respuesta #1 en: 2 Septiembre 2015, 19:55 pm »

¿Qué te carga entonces?


En línea

Black cracker

Desconectado Desconectado

Mensajes: 11



Ver Perfil
Re: [AYUDA] Error con función cargar archivo.
« Respuesta #2 en: 2 Septiembre 2015, 23:20 pm »

no me carga los strings.. creo que hay un problema con los fscanf_s con strings, pero no se cual es o como solucionarlo, gracias.
En línea

someRandomCode

Desconectado Desconectado

Mensajes: 250



Ver Perfil
Re: [AYUDA] Error con función cargar archivo.
« Respuesta #3 en: 3 Septiembre 2015, 00:17 am »

Si, es para errores..
fscanf carga strings de C, no de C++.
O sea que no podes usar el std::string, tendrias que usar un array de char para recibir el valor, entre otras cosas que veo en primera medida como que podrias usar un solo fscanf para levantar todos los valores..
Lo mismo el nuevo = new (componentes);
deberias especificar la clase y no veo donde esta definido componentes junto con los nuevos valores..
En línea

Black cracker

Desconectado Desconectado

Mensajes: 11



Ver Perfil
Re: [AYUDA] Error con función cargar archivo.
« Respuesta #4 en: 3 Septiembre 2015, 04:11 am »

ya modifique un poco la funcion, ya me carga pero los chars a la hora de imprimirlos o listarlos me tira basura..

FUNCION CARGAR
Código:
void cargar(Ptrcomponente &listas){
char nombre[20];
char nombre_1;
//nombre_1 = str.copy(nombre, 20, 5); intentando que no me tire basura
int cantidad;
char fabricante[20];
char fabricante_1 = str.copy(nombre, 20, 5);
int codigo;
Ptrcomponente nuevo;
FILE*Archivo;
fopen_s(&Archivo, "Base de datos.txt", "r+");
if (Archivo == NULL){ printf("ERROR"); }
else{
while (!feof(Archivo)){
fscanf_s(Archivo, "%s", nombre, 20);
fscanf_s(Archivo, "%i", &cantidad);
fscanf_s(Archivo, "%s", fabricante, 20);
fscanf_s(Archivo, "%i", &codigo);
nuevo = new(componentes);
nuevo->nombre = nombre;
nuevo->cantidad = cantidad;
nuevo->fabricante = fabricante;
nuevo->codigo = codigo;
nuevo->siguiente = NULL;
agregar(nuevo, listas);
}
}
fclose(Archivo);
}

FUNCION listar
Código:
void listar(Ptrcomponente &listas){
Ptrcomponente aux;
aux = listas;
int cont = 1;
while (aux != NULL){
printf("%d", cont);
printf("%s", aux->nombre);
printf("%d", aux->cantidad);
printf("%s", aux->fabricante);
printf("%d\n", aux->codigo);
aux = aux->siguiente;
cont++;
}
En línea

Black cracker

Desconectado Desconectado

Mensajes: 11



Ver Perfil
Re: [AYUDA] Error con función cargar archivo.
« Respuesta #5 en: 3 Septiembre 2015, 04:13 am »

me tira algo asi en la consola ...

-------Menu principal ------

LISTANDO INVENTARIO

1╠╠╠╠╠╠╠╠1233╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠123
2╠╠╠╠╠╠╠╠1233╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠123
3╠╠╠╠╠╠╠╠234╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠2342
4╠╠╠╠╠╠╠╠23╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠32424
En línea

someRandomCode

Desconectado Desconectado

Mensajes: 250



Ver Perfil
Re: [AYUDA] Error con función cargar archivo.
« Respuesta #6 en: 3 Septiembre 2015, 05:48 am »

como es la definicion de la clase que estas usando?
Otra cosa, si estas usando strings al estilo C para almacenar los datos, un a=b; no es suficiente, deberias usar strncpy.
Cuando haces nuevo->nombre = nombre; toma la direccion de memoria del primer elemento de nombre en nuevo->nombre;
que, a todo esto, parece que fuera una estructura y no una clase, o que has puesto las variables como publicas y no como privadas, cosa que seria un mal diseño...
En POO se suelen hacer Getters y Setters, getters para obtener los valores y setters para poner los valores. Que sea dicho de paso, se llaman en realidad "estado" del objeto o propiedades del mismo..
En línea

Black cracker

Desconectado Desconectado

Mensajes: 11



Ver Perfil
Re: [AYUDA] Error con función cargar archivo.
« Respuesta #7 en: 3 Septiembre 2015, 06:13 am »

 :huh: ;D ;D
Ahh bien. Una pregunta como usaria el strncpy en este caso? gracias de antemano bro  ;-)
En línea

someRandomCode

Desconectado Desconectado

Mensajes: 250



Ver Perfil
Re: [AYUDA] Error con función cargar archivo.
« Respuesta #8 en: 3 Septiembre 2015, 15:17 pm »

tendrias que hacer algo como:
Código
  1. void cargar(Ptrcomponente &listas){
  2. char nombre[20];
  3. char nombre_1;
  4. //nombre_1 = str.copy(nombre, 20, 5); intentando que no me tire basura
  5. int cantidad;
  6. char fabricante[20];
  7. char fabricante_1 = str.copy(nombre, 20, 5);
  8. int codigo;
  9. Ptrcomponente nuevo;
  10. FILE*Archivo;
  11. fopen_s(&Archivo, "Base de datos.txt", "r+");
  12. if (Archivo == NULL){ printf("ERROR"); }
  13. else{
  14. while (!feof(Archivo)){
  15. fscanf(Archivo,"%s%i%s%i",nombre,&cantidad,fabricante,&codigo);
  16.                        nuevo = new(componentes);
  17.                        strncpy(nuevo->nombre,nombre,largo_maximo_nuevo_nombre);
  18. ......
  19.  

Fijate de cualquier manera que estas mezclando C con C++, asique para la lectura deberias usar, para no complicarte:
Código
  1. std::string buffer;
  2. std::ifstream Archivo("MiBaseDeDatos.txt");
  3. std::cin.getline(archivo,buffer);
  4.  

Y revisa bien la estructura de tu objeto porque si es para una tarea te van a retar :P

EDITO: Mejor que irlo refactoreando a C++ empecemos a hacerlo de nuevo en C++ no te parece? :P
« Última modificación: 3 Septiembre 2015, 15:19 pm por someRandomCode » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines