<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>http://wiki.cabal.mx/index.php?action=history&amp;feed=atom&amp;title=Curso_de_Programaci%C3%B3n_en_C%2FProg122</id>
	<title>Curso de Programación en C/Prog122 - Historial de revisiones</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.cabal.mx/index.php?action=history&amp;feed=atom&amp;title=Curso_de_Programaci%C3%B3n_en_C%2FProg122"/>
	<link rel="alternate" type="text/html" href="http://wiki.cabal.mx/index.php?title=Curso_de_Programaci%C3%B3n_en_C/Prog122&amp;action=history"/>
	<updated>2026-05-10T11:27:49Z</updated>
	<subtitle>Historial de revisiones para esta página en el wiki</subtitle>
	<generator>MediaWiki 1.32.1</generator>
	<entry>
		<id>http://wiki.cabal.mx/index.php?title=Curso_de_Programaci%C3%B3n_en_C/Prog122&amp;diff=5544&amp;oldid=prev</id>
		<title>Perseuz: /* Prog122 */</title>
		<link rel="alternate" type="text/html" href="http://wiki.cabal.mx/index.php?title=Curso_de_Programaci%C3%B3n_en_C/Prog122&amp;diff=5544&amp;oldid=prev"/>
		<updated>2014-06-06T19:11:57Z</updated>

		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Prog122&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nueva&lt;/b&gt;&lt;/p&gt;&lt;div&gt;__NOTOC__&lt;br /&gt;
* [[:#Prog122 | Guardar un iarreglo de structs en un archivo]]&lt;br /&gt;
** [[:#Resultado | Resultado]]&lt;br /&gt;
** [[:#Explicación | Explicación]]&lt;br /&gt;
&lt;br /&gt;
== Prog122 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; line=&amp;quot;GESHI_FANCY_LINE_NUMBERS&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define MAXTITL   40&lt;br /&gt;
#define MAXAUTL   40&lt;br /&gt;
#define MAXVALL   12&lt;br /&gt;
#define MAXLIBROS   100&lt;br /&gt;
&lt;br /&gt;
struct Libro {&lt;br /&gt;
    char Titulo[MAXTITL];&lt;br /&gt;
    char Autor[MAXAUTL];&lt;br /&gt;
    float Valor;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
int main( void )&lt;br /&gt;
{&lt;br /&gt;
  struct Libro Biblioteca[MAXLIBROS];&lt;br /&gt;
&lt;br /&gt;
  int   Conteo = 0,&lt;br /&gt;
        ConteoDelArchivo,&lt;br /&gt;
        Index,&lt;br /&gt;
        NumPuntos,&lt;br /&gt;
        Tamano = sizeof( struct Libro ),&lt;br /&gt;
        i;&lt;br /&gt;
&lt;br /&gt;
  char  ValSTR[MAXVALL];&lt;br /&gt;
&lt;br /&gt;
  FILE * PLibros;&lt;br /&gt;
&lt;br /&gt;
  if( ( PLibros = fopen( &amp;quot;Libros.dat&amp;quot;, &amp;quot;a+b&amp;quot; ) ) == NULL )&lt;br /&gt;
  {&lt;br /&gt;
    fputs( &amp;quot;No puedo abrir Libros.dat\n&amp;quot;, stderr );&lt;br /&gt;
    exit( 1 );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  rewind( PLibros );&lt;br /&gt;
&lt;br /&gt;
  while( Conteo &amp;lt; MAXLIBROS &amp;amp;&amp;amp;&lt;br /&gt;
         fread( &amp;amp;Biblioteca[Conteo], Tamano, 1, PLibros ) == 1 )&lt;br /&gt;
  {&lt;br /&gt;
    if( Conteo == 0 )&lt;br /&gt;
      puts( &amp;quot;Los contenidos de Libros.dat ahora:&amp;quot; );&lt;br /&gt;
    printf( &amp;quot;\t%s por %s: $%.2f\n&amp;quot;, Biblioteca[Conteo].Titulo,&lt;br /&gt;
                                    Biblioteca[Conteo].Autor,&lt;br /&gt;
                                    Biblioteca[Conteo].Valor );&lt;br /&gt;
    Conteo++;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  ConteoDelArchivo = Conteo;&lt;br /&gt;
&lt;br /&gt;
  if( Conteo == MAXLIBROS )&lt;br /&gt;
  {&lt;br /&gt;
    fputs( &amp;quot;El archivo: Libros.dat está lleno.&amp;quot;, stderr );&lt;br /&gt;
    fclose( PLibros );&lt;br /&gt;
    exit( 2 );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  printf( &amp;quot;\nIngresa el nombre del libro: &amp;quot; );&lt;br /&gt;
  while( Conteo &amp;lt; MAXLIBROS )&lt;br /&gt;
  {&lt;br /&gt;
    if( fgets( Biblioteca[Conteo].Titulo, MAXTITL - 2, stdin ) &amp;amp;&amp;amp;&lt;br /&gt;
               Biblioteca[Conteo].Titulo[0] != &amp;#039;\n&amp;#039; )&lt;br /&gt;
    {&lt;br /&gt;
      if( *(Biblioteca[Conteo].Titulo +&lt;br /&gt;
            strlen( Biblioteca[Conteo].Titulo ) -1 ) != &amp;#039;\n&amp;#039; )&lt;br /&gt;
      {&lt;br /&gt;
        fprintf( stderr, &amp;quot;El titulo que entraste es demasiado largo.\n&amp;quot;&lt;br /&gt;
                &amp;quot;Solo %d chars MAX\n&amp;quot;, MAXTITL - 2 );&lt;br /&gt;
        fclose( PLibros );&lt;br /&gt;
        exit(1);&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      *(Biblioteca[Conteo].Titulo +&lt;br /&gt;
        strlen( Biblioteca[Conteo].Titulo ) -1 ) = &amp;#039;\0&amp;#039;;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
      break;&lt;br /&gt;
&lt;br /&gt;
    printf( &amp;quot;Ingresa el nombre del autor: &amp;quot; );&lt;br /&gt;
    if( fgets( Biblioteca[Conteo].Autor, MAXAUTL - 2, stdin ) &amp;amp;&amp;amp;&lt;br /&gt;
               Biblioteca[Conteo].Autor[0] != &amp;#039;\n&amp;#039; )&lt;br /&gt;
    {&lt;br /&gt;
      if( *(Biblioteca[Conteo].Autor +&lt;br /&gt;
            strlen( Biblioteca[Conteo].Autor ) -1 ) != &amp;#039;\n&amp;#039; )&lt;br /&gt;
      {&lt;br /&gt;
        fprintf( stderr, &amp;quot;El autor que entraste es demasiado largo.\n&amp;quot;&lt;br /&gt;
                &amp;quot;Solo %d chars MAX\n&amp;quot;, MAXAUTL - 2 );&lt;br /&gt;
        fclose( PLibros );&lt;br /&gt;
        exit(1);&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      *(Biblioteca[Conteo].Autor +&lt;br /&gt;
        strlen( Biblioteca[Conteo].Autor ) -1 ) = &amp;#039;\0&amp;#039;;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
      fprintf( stderr, &amp;quot;Falta el nombre del autor de \&amp;quot;%s\&amp;quot;\n&amp;quot;,&lt;br /&gt;
               Biblioteca[Conteo].Titulo );&lt;br /&gt;
      fclose( PLibros );&lt;br /&gt;
      exit(1);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    NumPuntos = 0;&lt;br /&gt;
    printf( &amp;quot;Ingresa el valor: &amp;quot; );&lt;br /&gt;
    if( fgets( ValSTR, MAXVALL - 2, stdin ) &amp;amp;&amp;amp; ValSTR[0] != &amp;#039;\n&amp;#039; )&lt;br /&gt;
    {&lt;br /&gt;
      if( *(ValSTR + strlen( ValSTR ) -1 ) != &amp;#039;\n&amp;#039; )&lt;br /&gt;
      {&lt;br /&gt;
        fprintf( stderr, &amp;quot;El valor que entraste es demasiado largo.\n&amp;quot;&lt;br /&gt;
                &amp;quot;Solo %d chars MAX\n&amp;quot;, MAXVALL - 2 );&lt;br /&gt;
        fclose( PLibros );&lt;br /&gt;
        exit(1);&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      *(ValSTR + strlen( ValSTR ) -1 ) = &amp;#039;\0&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
      if( ValSTR[0] == &amp;#039;-&amp;#039; )&lt;br /&gt;
      {&lt;br /&gt;
        fputs( &amp;quot;No se permiten valores negativos.&amp;quot;, stderr );&lt;br /&gt;
        fclose( PLibros );&lt;br /&gt;
        exit(1);&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      for( i = 0; i &amp;lt; strlen( ValSTR ) - 1; i++ )&lt;br /&gt;
      {&lt;br /&gt;
        if( ValSTR[i] &amp;lt; &amp;#039;0&amp;#039; ||  ValSTR[i] &amp;gt; &amp;#039;9&amp;#039; )&lt;br /&gt;
        {&lt;br /&gt;
          if( ValSTR[i] == &amp;#039;.&amp;#039; )&lt;br /&gt;
          {&lt;br /&gt;
            if( ++NumPuntos &amp;gt; 1 )&lt;br /&gt;
            {&lt;br /&gt;
              fprintf( stderr, &amp;quot;Se permite solo 1 punto.\n&amp;quot; );&lt;br /&gt;
              fclose( PLibros );&lt;br /&gt;
              exit(1);&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            if( strlen( ValSTR ) - i &amp;gt; 3 )&lt;br /&gt;
            {&lt;br /&gt;
              fputs( &amp;quot;Se permiten solo 2 decimales después del punto.&amp;quot;, stderr );&lt;br /&gt;
              fclose( PLibros );&lt;br /&gt;
              exit(1);&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
          else&lt;br /&gt;
          {&lt;br /&gt;
            fputs( &amp;quot;Caracteres ilegales en su valor.&amp;quot;, stderr );&lt;br /&gt;
            fclose( PLibros );&lt;br /&gt;
            exit(1);&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      Biblioteca[Conteo++].Valor = atof( ValSTR );&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
      fprintf( stderr, &amp;quot;Falta el valor de \&amp;quot;%s\&amp;quot;\n&amp;quot;, Biblioteca[Conteo].Titulo );&lt;br /&gt;
      fclose( PLibros );&lt;br /&gt;
      exit(1);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if( Conteo &amp;lt; MAXLIBROS )&lt;br /&gt;
      printf( &amp;quot;Ingresa el sigiuente titulo: (&amp;lt;Enter&amp;gt; para terminar): &amp;quot; );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if (Conteo &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
    puts( &amp;quot;\nAquí es la lista de sus libros:&amp;quot; );&lt;br /&gt;
    for( Index = 0; Index &amp;lt; Conteo; Index++ )&lt;br /&gt;
      printf( &amp;quot;\t\&amp;quot;%s\&amp;quot; por \&amp;quot;%s\&amp;quot;: $%.2f\n&amp;quot;, Biblioteca[Index].Titulo,&lt;br /&gt;
                                              Biblioteca[Index].Autor,&lt;br /&gt;
                                              Biblioteca[Index].Valor );&lt;br /&gt;
    fwrite( &amp;amp;Biblioteca[ConteoDelArchivo], Tamano, Conteo - ConteoDelArchivo,&lt;br /&gt;
                                                                   PLibros );&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
    puts( &amp;quot;Lo siento pero no tengo libros nuevos para mostrar.&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
  puts( &amp;quot;\n¡Adios!\n&amp;quot; );&lt;br /&gt;
  fclose( PLibros );&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Resultado ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[rrc@llawyr CClase]$ rm Libros.dat &lt;br /&gt;
rm: remove regular file `Libros.dat&amp;#039;? y&lt;br /&gt;
[rrc@llawyr CClase]$ gcc -Wall -o Prog122 Prog122.c&lt;br /&gt;
[rrc@llawyr CClase]$ ./Prog122&lt;br /&gt;
&lt;br /&gt;
Ingresa el nombre del libro: &lt;br /&gt;
Lo siento pero no tengo libros nuevos para mostrar.&lt;br /&gt;
&lt;br /&gt;
¡Adios!&lt;br /&gt;
&lt;br /&gt;
[rrc@llawyr CClase]$ ./Prog122&lt;br /&gt;
&lt;br /&gt;
Ingresa el nombre del libro: Libro Uno&lt;br /&gt;
Ingresa el nombre del autor: Autor uno&lt;br /&gt;
Ingresa el valor: Valor 1&lt;br /&gt;
Caracteres ilegales en su valor.&lt;br /&gt;
[rrc@llawyr CClase]$ ./Prog122&lt;br /&gt;
&lt;br /&gt;
Ingresa el nombre del libro: Libro Uno&lt;br /&gt;
Ingresa el nombre del autor: Autor Uno&lt;br /&gt;
Ingresa el valor: 13.55&lt;br /&gt;
Ingresa el siguiente titulo: (&amp;lt;Enter&amp;gt; para terminar): Libro Dos&lt;br /&gt;
Ingresa el nombre del autor: Autor 2&lt;br /&gt;
Ingresa el valor: 52.66&lt;br /&gt;
Ingresa el siguiente titulo: (&amp;lt;Enter&amp;gt; para terminar): &lt;br /&gt;
&lt;br /&gt;
Aquí esta la lista de sus libros:&lt;br /&gt;
	&amp;quot;Libro Uno&amp;quot; por &amp;quot;Autor Uno&amp;quot;: $13.55&lt;br /&gt;
	&amp;quot;Libro Dos&amp;quot; por &amp;quot;Autor 2&amp;quot;: $52.66&lt;br /&gt;
&lt;br /&gt;
¡Adios!&lt;br /&gt;
&lt;br /&gt;
[rrc@llawyr CClase]$ ./Prog122&lt;br /&gt;
Los contenidos de Libros.dat ahora:&lt;br /&gt;
	Libro Uno por Autor Uno: $13.55&lt;br /&gt;
	Libro Dos por Autor 2: $52.66&lt;br /&gt;
&lt;br /&gt;
Ingresa el nombre del libro: Libro Tres&lt;br /&gt;
Ingresa el nombre del autor: Autor Tres&lt;br /&gt;
Ingresa el valor: 62.88&lt;br /&gt;
Ingresa el siguiente titulo: (&amp;lt;Enter&amp;gt; para terminar): Libro Cuatro&lt;br /&gt;
Ingresa el nombre del autor: Autor Cuatro&lt;br /&gt;
Ingresa el valor: 62.44&lt;br /&gt;
Ingresa el siguiente titulo: (&amp;lt;Enter&amp;gt; para terminar): &lt;br /&gt;
&lt;br /&gt;
Aquí esta la lista de sus libros:&lt;br /&gt;
	&amp;quot;Libro Uno&amp;quot; por &amp;quot;Autor Uno&amp;quot;: $13.55&lt;br /&gt;
	&amp;quot;Libro Dos&amp;quot; por &amp;quot;Autor 2&amp;quot;: $52.66&lt;br /&gt;
	&amp;quot;Libro Tres&amp;quot; por &amp;quot;Autor Tres&amp;quot;: $62.88&lt;br /&gt;
	&amp;quot;Libro Cuatro&amp;quot; por &amp;quot;Autor Cuatro&amp;quot;: $62.44&lt;br /&gt;
&lt;br /&gt;
¡Adios!&lt;br /&gt;
&lt;br /&gt;
[rrc@llawyr CClase]$ ./Prog122&lt;br /&gt;
Los contenidos de Libros.dat ahora:&lt;br /&gt;
	Libro Uno por Autor Uno: $13.55&lt;br /&gt;
	Libro Dos por Autor 2: $52.66&lt;br /&gt;
	Libro Tres por Autor Tres: $62.88&lt;br /&gt;
	Libro Cuatro por Autor Cuatro: $62.44&lt;br /&gt;
&lt;br /&gt;
Ingresa el nombre del libro: &lt;br /&gt;
&lt;br /&gt;
Aquí esta la lista de sus libros:&lt;br /&gt;
	&amp;quot;Libro Uno&amp;quot; por &amp;quot;Autor Uno&amp;quot;: $13.55&lt;br /&gt;
	&amp;quot;Libro Dos&amp;quot; por &amp;quot;Autor 2&amp;quot;: $52.66&lt;br /&gt;
	&amp;quot;Libro Tres&amp;quot; por &amp;quot;Autor Tres&amp;quot;: $62.88&lt;br /&gt;
	&amp;quot;Libro Cuatro&amp;quot; por &amp;quot;Autor Cuatro&amp;quot;: $62.44&lt;br /&gt;
&lt;br /&gt;
¡Adios!&lt;br /&gt;
&lt;br /&gt;
[rrc@llawyr CClase]$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Explicación ===&lt;br /&gt;
 &lt;br /&gt;
[[Category:Programación en C]]&lt;br /&gt;
[[Category:CCabal]]&lt;br /&gt;
[[Category:CursoC]]&lt;/div&gt;</summary>
		<author><name>Perseuz</name></author>
		
	</entry>
</feed>