[C con Clase] Ayuda

Davidson, Steven srd4121 en njit.edu
Mie Mayo 25 17:34:47 CEST 2016


Hola Federico,

2016-05-25 3:23 GMT-04:00 Federico Bracamonte <fede_b389 en hotmail.com>:

> Hola alguien podria ser tan amable para exlicarme detalladamente que hace
> cada funcion? la que es vectorizar y las demas. Porque no entiendo el
> manejo de ficheros y me pasaron en estas funciones. Muchas Gracias
>
> Es de un programa para cargar productos, ver el stock, precio de venta,
> reporte de mercaderia, etc
>

Como estás teniendo problemas con las funciones que manejan archivos,
sugiero que consultes los recursos en nuestra página. Puedes dirigirte a la
referencia de la biblioteca <stdio.h>:
http://c.conclase.net/librerias/?ansilib=stdio#inicio  al igual que el
curso de archivos: http://c.conclase.net/ficheros/index.php (los primeros
capítulos te vienen bien).

Voy comentando un poco el funcionamiento del código fuente que nos envías:

- La función, 'vectorizar()', sirve para procesar la cadena, 'B', separando
las subcadenas entre los caracteres, '¥', copiándolas a cada array en
'A[i]'. Por ejemplo,

B <-- "datos¥más datos¥muchos más datos¥\0"

Se procesa 'B' separando los datos en varios arrays:

A[0] <-- "datos\0"
A[1] <-- "más datos\0"
A[2] <-- "muchos más datos\0"

- La función 'Datos()' sirve para convertir cada cadena separada en
'vector' a su representación correcta en las estructuras de 'Producto';
esto es, se copian las cadenas de caracteres a cada miembro
correspondiente, se convierte 'vector[i]' a números enteros, decimales,
etc..

- En 'Datos()', se invoca 'fopen()' para abrir un fichero (o archivo) de
texto para su lectura con el nombre de "datos.txt".

- Se invoca 'fread()' erróneamente. Está escrito,

char linea[99]="";
...
fread( &linea,sizeof(linea),1,fichero )

Esto es incorrecto, porque 'linea' ya es una dirección de memoria, por lo
tanto se puede convertir a un puntero implícitamente.

La solución es pasar 'linea' directamente; esto es,

fread( linea,sizeof(linea),1,fichero )

- La función, 'fread()', sirve para leer una cantidad de bytes,
representados como 'char', desde un fichero (previamente abierto). Por
ejemplo,

fread( linea,sizeof(linea),1,fichero )

leerá hasta 99 bytes (como 'char') y los guardará en 'linea'. Por cierto,
internamente existe un cursor de lectura que se aumentará en preparación
para siguientes lecturas, invocando a 'fread()'.

- La función 'guardar()' sirve exactamente para este propósito: se guarda
los datos en 'Producto[i]' al fichero de texto, "datos.txt".

- La función, 'fwrite()', sirve para escribir una serie de bytes (como
'char') a un fichero (previamente abierto).


Espero que esto te oriente.

Steven
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20160525/e4d35a71/attachment.html>


Más información sobre la lista de distribución Cconclase