Gracias me es de gran ayuda lo que me has corregido, <br>muy agradecido Steven Davidson<br><br><div class="gmail_quote">El 11 de julio de 2010 03:22, Steven Davidson <span dir="ltr"><<a href="mailto:srd4121@njit.edu">srd4121@njit.edu</a>></span> escribió:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Hola Luis,<div class="im"><br>
<br>
Luis Arenas wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>
1.- este codigo qeu tengo cuando lo corro en devc me funciona bien<br>
hasta que elijo la opcion dos, se abre ingreso la marca eltipo todo<br>
bien hasta elprecio cuando tiene que grabar en el archivo no graba y<br>
se queda pegado hasta qe aparec un cuadro qeu dice que elprograma no<br>
responde.<br>
<br>
</blockquote>
<br></div>
A mí me ejecuta correctamente, pero es cuestión de suerte, porque tienes varios errores al leer y escribir. Te los comento en el código fuente.<div class="im"><br>
<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>
2.-como ven en  el codigo cree un vector de estructuras la idea es<br>
que cuando se quiera buscar un producto desde el archivo se copie<br>
todo lo que este ahi en el vector de estructuras pero como hago eso<br>
???<br>
</blockquote>
<br></div>
Como el fichero es de texto, tendrás que interpretar la información para lo que quieres. Por ahora, existen tres cadenas de caracteres y un número entero por cada registro. Por consiguiente, no hace falta interpretar esta información, pero sí el número entero que representa el precio. Afortunadamente, 'fscanf()' ya realiza esta tarea para nosotros.<br>

<br>
Lo que sí debes tener en cuenta es el formato u organización interna del fichero. Deberías elegir caracteres que sirvan para marcar el fin y el comienzo de cada parte de la información guardada. Por ejemplo, podríamos diseñar el siguiente formato:<br>

<br>
[TIPO];[MARCA];[DESCRIPCIÓN];[PRECIO]\n<br>
<br>
De esta forma, cada registro que contiene la información del producto se guarda en cada línea, indicada por el carácter '\n'. Por ejemplo,<br>
<br>
Carne;Burger King;Corteza de árbol en forma de carne;2\n<br>
Patatas Fritas;Doritos;Corteza de árbol frita;4\n<br>
<br>
Existen varias formas de implementar esta lectura. Podemos leer cada línea de texto y guardarla en una cadena de caracteres, usando 'fgets()'. Posteriormente, podemos usar 'strtok()' para conseguir un puntero a cada cadena, que nos interesa, para procesarla; debemos tener en cuenta los caracteres delimitadores (o separadores), pero sin guardarlos en los campos.<br>

<br>
En el caso de los tres primeros campos, cada cadena es copiada tal y como aparece. Pero para el último campo, tenemos que interpretar esta última cadena para poder conseguir un valor numérico de tipo 'int'. Para esto, invocamos 'sscanf()'. Por ejemplo,<br>

<br>
char szLinea[256];<br>
char *ptr;<br>
...<br>
sscanf( ptr, "%d", &produc[0].precio );<br>
<br>
Para más información acerca de estas funciones, consulta la referencia en nuestra página yendo a: <a href="http://c.conclase.net/librerias/index.php?ansilib=stdio#inicio" target="_blank">http://c.conclase.net/librerias/index.php?ansilib=stdio#inicio</a>  y a <a href="http://c.conclase.net/librerias/index.php?ansilib=string#inicio" target="_blank">http://c.conclase.net/librerias/index.php?ansilib=string#inicio</a><br>

<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>
</blockquote>
<br>
Veamos el código fuente.<div class="im"><br>
<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
#include <stdio.h><br>
#include <stdlib.h><br>
<br>
<br>
struct {<br>
       char tipo_producto;<br>
       char marca_producto;<br>
       char descripcion;<br>
       int precio;<br>
       }vec[50],produc[1];<br>
            int m,opc;<br>
</blockquote>
<br></div>
No es recomendable definir variables globales. Define éstas localmente, en 'main()'.<br>
<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
main(){<br>
</blockquote>
<br>
En C/C++, debes indicar el tipo de retorno 'int' explícitamente.<div><div></div><div class="h5"><br>
<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
     m=1;<br>
while(m==1){<br>
printf("  **************************************************************************\n");<br>
printf("  **          Bienvenido al software de precio Sagrado Corazon            **\n");<br>
printf("  **************************************************************************\n\n\n\n\n\n");<br>
printf("                  1.- Consultar Precio Producto\n");<br>
printf("                  2.- Ingresar Nuevo Producto\n");<br>
printf("                  3.- Salir \n\n\n");<br>
printf("Ingrese su opcion:\n");<br>
scanf("%d",&opc);<br>
switch(opc){<br>
                 case 1:<br>
           break;<br>
      case 2:<br>
           FILE *pf;<br>
      if ((pf = fopen("productos.txt","a+")) == NULL) {<br>
            printf("Error abriendo el archivo\n");<br>
            exit(1);}            system("cls");<br>
           printf("Ingrese nombre producto");<br>
           printf("\n\n Ingrese el tipo de producto\n");<br>
           scanf("%s",&produc[0].tipo_producto);<br>
           printf("\n\n Ingrese Marca del producto\n");<br>
           scanf("%s",&produc[0].marca_producto);<br>
           printf("\n\n Ingrese descripcion del producto\n");<br>
           scanf("%s",&produc[0].descripcion);<br>
</blockquote>
<br></div></div>
El uso de 'scanf()' es incorrecto para estos campos. Estás indicando que cada campo es una cadena de caracteres, cuando en verdad cada uno es de tipo 'char'. Por lo tanto, deberías indicar "%c" y no "%s" en 'scanf()'.<br>

<br>
Claro está, lo más seguro es que el error es de diseño y realmente quieres que esos tres campos representen cadenas de caracteres. Esto es,<br>
<br>
struct producto_t<br>
{<br>
  char tipo_producto[30];<br>
  char marca_producto[30];<br>
  char descripcion[60];<br>
  int precio;<br>
};<br>
<br>
Las lecturas con 'scanf()' serán:<div class="im"><br>
<br>
scanf( "%s", produc[0].tipo_producto );<br></div><div class="im">
scanf( "%s", produc[0].marca_producto );<br></div><div class="im">
scanf( "%s", produc[0].descripcion );<br>
<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
           printf("\n\n Ingrese el PRECIO\n");<br>
           scanf("%d",&produc[0].precio);<br>
           printf("\n\nProducto ingresado");<br>
           fprintf(pf,"%c",produc[0].tipo_producto);<br>
           fprintf(pf,"%c",produc[0].marca_producto);<br>
           fprintf(pf,"%c",produc[0].descripcion);<br>
</blockquote>
<br></div>
Esto es correcto con el diseño original, pero con el nuevo, tendrás que usar "%s" para indicar que son cadenas - terminadas en nulo.<div class="im"><br>
<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
           fprintf(pf,"%c",produc[0].precio);<br>
</blockquote>
<br></div>
Esto no es correcto. Este campo es de tipo 'int', y por tanto, debes usar el especificador %d. Esto es,<br>
<br>
fprintf( pf, "%d", produc[0].precio );<br>
<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
                   }<br>
</blockquote>
<br>
Deberías retornar un número entero. Se retorna 0 (cero) para indicar que el programa ha terminado con éxito.<br>
<br>
<br>
Espero haber aclarado las dudas.<div><div></div><div class="h5"><br>
<br>
Steven<br>
<br>
<br>
_______________________________________________<br>
Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net" target="_blank">Cconclase@listas.conclase.net</a><br>
<a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>Septone Arenas <br>Ing. en alcohol y drogas<br>Dpto. de Estupefacientes y Psicotropicos<br>___________________________________<br><br>Lo tildaron de demente<br>
lo sentenciaron así,<br>porque siempre fue el alcohol<br>la cura de sus penas<br>