Autor
|
Tema: [AYUDA] Error con función cargar archivo. (Leído 2,853 veces)
|
Black cracker
Desconectado
Mensajes: 11
|
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. Acá la función: 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
Mensajes: 3.412
ASMático
|
¿Qué te carga entonces?
|
|
|
En línea
|
|
|
|
Black cracker
Desconectado
Mensajes: 11
|
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
Mensajes: 250
|
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
Mensajes: 11
|
ya modifique un poco la funcion, ya me carga pero los chars a la hora de imprimirlos o listarlos me tira basura.. FUNCION CARGAR 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 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
Mensajes: 11
|
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
Mensajes: 250
|
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
|
|
|
|
|
someRandomCode
Desconectado
Mensajes: 250
|
tendrias que hacer algo como: 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(Archivo,"%s%i%s%i",nombre,&cantidad,fabricante,&codigo); nuevo = new(componentes); strncpy(nuevo->nombre,nombre,largo_maximo_nuevo_nombre); ......
Fijate de cualquier manera que estas mezclando C con C++, asique para la lectura deberias usar, para no complicarte: std::string buffer; std::ifstream Archivo("MiBaseDeDatos.txt"); std::cin.getline(archivo,buffer);
Y revisa bien la estructura de tu objeto porque si es para una tarea te van a retar EDITO: Mejor que irlo refactoreando a C++ empecemos a hacerlo de nuevo en C++ no te parece?
|
|
« Última modificación: 3 Septiembre 2015, 15:19 pm por someRandomCode »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
error al cargar el motor de grabacion del xoom. ayuda porfi.
Multimedia
|
el_fosi
|
8
|
3,754
|
17 Febrero 2005, 06:02 am
por el_fosi
|
|
|
Ayuda... Repetir funcion hasta el final del archivo
« 1 2 »
Programación Visual Basic
|
apexseal
|
10
|
5,560
|
19 Agosto 2012, 23:24 pm
por apexseal
|
|
|
(Ayuda) Error al cargar BMP
Programación C/C++
|
Seyro97
|
2
|
2,522
|
18 Mayo 2015, 15:04 pm
por Seyro97
|
|
|
(Ayuda con OpenGL) La función 'SetPixelFormat' me da un error
Programación C/C++
|
Seyro97
|
0
|
1,696
|
8 Junio 2015, 05:05 am
por Seyro97
|
|
|
Ayuda para hacer una función que busque en un archivo - C
Programación C/C++
|
lucasxxviii
|
6
|
3,620
|
25 Junio 2016, 01:43 am
por lucasxxviii
|
|