• Sábado 14 de Diciembre de 2024, 22:39

Autor Tema:  Problema con programa  (Leído 2437 veces)

patosi

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Problema con programa
« en: Jueves 4 de Marzo de 2010, 13:14 »
0
Buenas necesito que me ayudeis con un programa en C. El programa tiene que almacenar un texto en un fichero y luego pedirle al usuario cuantas lineas visualizar de este texto y mostralo.
El programa me crea el fichero pero dentro me escribe muchos simbolos raros en vez del programa y a la hora de pedir las lineas, el usuario las introduce y no muestra nada. Os dejo el codigo haber si me podeis hechar una mano.

#include <stdio.h>
#include <conio.h>
#include <string.h>

#define MAXFILAS 22
#define MAXCOLUMNAS 80

void IniciarMatriz ( char matriz [MAXFILAS] [MAXCOLUMNAS]);
void Leer (FILE *fichero);
void Escribir (FILE *fichero, char matriz [MAXFILAS] [MAXCOLUMNAS]);

int main ( )
{
FILE *libro=NULL;
int final = 0 ;
char texto [ MAXFILAS ] [ MAXCOLUMNAS ];

while (final != 0 )
IniciarMatriz(texto);
Escribir(libro,texto);
Leer(libro);

return 0;

}

/* Funcion que inicia la matriz la cual contiene el texto elegido del libro. */

void IniciarMatriz (char texto [ MAXFILAS ] [ MAXCOLUMNAS ] )
{
strcpy(texto[ 0 ], " Todas las concepciones de la Iglesia son reconocidas por lo que son, como la más triste acuñación de moneda ");
strcpy(texto[ 1 ], " falsa que ha existido hecha con el fin de desvalorizar la Naturaleza y los valores naturales: ");
strcpy(texto[ 2 ], " el sacerdote mismo es reconocido como lo que es, como la más peligrosa especie de parásito ");
strcpy(texto[ 3 ], " como la verdadera araña venenosa de la vida... Nosotros sabemos, nuestra conciencia sabe hoy, ");
strcpy(texto[ 4 ], " qué valen en general aquellas funestas ínvenciones de los sacerdotes y de la iglesia, de qué servirán, ");
strcpy(texto[ 5 ], " esto es, para conseguir aquel estado de damnificación de la humanidad, cuyo espectáculo produce náuseas, ");
strcpy(texto[ 6 ], " los conceptos de más allá, juicio final, inmortalidad del alma, el alma misma, sin instrumentos de tortura ");
strcpy(texto[ 7 ], " y sistemas de crueldad, en virtud de los cuales el sacerdote se hizo el amo y siguió siendo el amo "),
strcpy(texto[ 8 ], " Todos saben esto, y sin embargo todo sigue igual. Donde ha ido a parar el último sentimiento del decoro ");
strcpy(texto[ 9 ], " del respeto de si mismo, si hasta nuestros hombres de Estado – por lo demás, una especie de hombres y ");
strcpy(texto[ 10 ], " de anticristianos bastante descocada en la práctica – se llamean aun hoy cristianos y toman la comunión? ");
strcpy(texto[ 11 ], " Toda práctica de cada momento, todo instinto, toda valoración que se convierte en hecho es hoy ");
strcpy(texto[ 12 ], " anticristiana;¿qué aborto de falsedad debe ser el hombre moderno para no avergonzarse todavía de llamarse cristiano! ");
strcpy(texto[ 13 ], " Ya la palabra cristiano es un equivoco: en el fondo no hubo más que un cristiano, y éste murió en la cruz. ");
strcpy(texto[ 14 ], " El Evangelio murió en la cruz. Lo que a partir de aquel momento se llamó evangelio era lo contrario de lo que ");
strcpy(texto[ 15 ], " él vivió; una mala nueva, un Dysangelium. Es falso hasta el absurdo ver la característica del cristiano ");
strcpy(texto[ 16 ], " en una fe, por ejemplo, en la fe de le redención por medio de Cristo; únicamente la práctica cristiana, el vivir ");
strcpy(texto[ 17 ], " como vivió el que murió en la cruz es lo cristiano... Aun hoy, tal vida es posible para ciertos hombres, ");
strcpy(texto[ 18 ], " y hasta necesaria: el verdadero, el originario cristianismo será posible en todos los tiempos. ");
strcpy(texto[ 19 ], " Yo llamo al cristianismo la única gran maldición, la única gran corrupción interior, el único gran instinto de venganza, ");
strcpy(texto[ 20 ], " yo la llamo la única inmortal vergüenza de la humanidad. ");

}

/* Función que escribe y almacena en el fichero el contenido del texto. */

void Escribir (FILE *fichero, char texto [ MAXFILAS ] [ MAXCOLUMNAS ])
{
int i;
int j;


if ((fichero = fopen("texto.txt", "w"))== NULL)
{
printf ( "n Error al crear el fichero n");
}
else
{
for (i = 0; i < MAXFILAS; i++)
{
for (j = 0; j < MAXCOLUMNAS; j++)
{
fprintf( fichero, "%c", texto [ i ][ j ] );
}
}

}
}


/* Función que lee el contenido almacenado en el texto, pide las lineas que el usuario desea ver y las imprime. */

void Leer (FILE *fichero)
{
int i;
int lineas;
int j;
char caracter;


if ((fichero = fopen("texto.txt", "r"))== NULL)
{
printf ( "n Error al crear el fichero n");
}
else
{
do {
printf("nIntroduzca numero de lineas que desea visualizar: ('Pulse 0 para salir') n ");
scanf ("%d",&lineas);
fflush(stdin);


for (i = 0; i < lineas; i++)
{
for (j = 0; j < MAXCOLUMNAS; j++)
{
fscanf(fichero , "%c", &caracter);
printf("%c", caracter);
}

}

} while (lineas!=0);
fclose ( fichero );
}
}

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Problema con programa
« Respuesta #1 en: Jueves 4 de Marzo de 2010, 19:14 »
0
Hola patosi, prmero que nada un consejo, cuando publiques codigo, utiliza las etiquetas [ code][ /code] (sin espacio en los corchetes) para encerrar tu codigo, eso hace que sea mas legible.

Ahora revisando tu programa, diria que tienes dos errrores basicos, el primero esta en esta parte:

Código: C++
  1.  
  2.     while (final != 0 )
  3.     IniciarMatriz(texto);
  4.  
  5.  


En esta parte tienes un ciclo while que se ejecuta solo si la variable "final" no es igual a cero, pero como arriba la inicializas con un valor a cero, entonces la condicion del ciclo es falsa, por lo que nunca entra al ciclo while, y al no entrar, nunca inicializa la matriz, entonces la matriz contendra basura, y al guardarla en el archivo guardara basura, es por eso que obtienes "simbolos extraños". Ademas ese ciclo no lo necesitas (en mi opinion) para nada, asi que simplemente borra la linea del while y deja la linea de IniciarMatriz(texto);

El otro error es que en la funcion escribir nunca cierras el archivo, asi que simplemente agrega un fclose(fichero); despues de que hayas terminado de escribir la matriz para cerrar el archivo.

Bueno eso es lo que encontre a simple vista.

Saludos y suerte :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

patosi

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Problema con programa
« Respuesta #2 en: Domingo 7 de Marzo de 2010, 17:36 »
0
Gracias por contestar.

  El problema esque el problema es que el programa tiene que repetirse hasta que el usuario quiera, por eso necesito el while. Lo de los simbolos extraños era por lo que me comentaste pero ahora hay otro problema; El programa tiene que mostrar el texto nada mas comenzar el programa y no lo hace y otro problema es a la hora de decir quiero que muestre X lineas las muestra pero sin respetar los saltos de linea que yo he definido en el codigo..

Haber si me podeis ayudar. Gracias un saludo.

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Problema con programa
« Respuesta #3 en: Lunes 8 de Marzo de 2010, 00:18 »
0
Cita de: "patosi"
 El problema esque el problema es que el programa tiene que repetirse hasta que el usuario quiera, por eso necesito el while.

Entonces estas definiendo mal el while, y probablemente necesitarias un do..while en lugar de un while, algo como:

Código: C++
  1.  
  2.     char final;
  3.     do
  4.     {
  5.      Leer(libro);
  6.      printf("Terminr programa (s/n)n");
  7.      final = getchar();
  8.     } while (final != 's');
  9.  
  10.  

Citar
El programa tiene que mostrar el texto nada mas comenzar el programa y no lo hace

Esto es porque no lo estas haciendo, deberias de añadir codigo para mostrar todo el texto, justo despues de IniciarMatriz(texto) y antes de Escribir(libro,texto), seria una funcion adicional a void Leer (FILE *fichero) pero que te muestre el texto en la pantalla antes de escribir en el archivo.

Citar
y otro problema es a la hora de decir quiero que muestre X lineas las muestra pero sin respetar los saltos de linea que yo he definido en el codigo..

Pues dejame decirte que en tu programa NUNCA defines saltos de linea, el hecho de que separas las lineas de texto de tu matriz, no significa que se separan por arte de magia, debes añadir manualmente los saltos de linea.

Ademas descubri otros problemas con tu codigo:

Uno es que estas escribiendo las lineas de manera incorrecta en tu programa, tu estas escribiendo caracter por caracter, cuando deberias hacerlo linea por linea. Si te pidieron que escribieras caracter por caracter, tendrias que agregar una verificacion adicional para cuando llegues al final de la cadena, insertar el salto de linea y leer la siguiente cadena. Si no es asi, y te permiten escribir lineas enteras, entonces reemplaza el siguiente codigo:
Código: C++
  1.  
  2.         for (i = 0; i < MAXFILAS; i++)
  3.         {
  4.             for (j = 0; j < MAXCOLUMNAS; j++)
  5.             {
  6.                 fprintf( fichero, "%c", texto [ i ][ j ] );
  7.             }
  8.         }
  9.  
  10.  

Por este que escribe lineas enteras, con su salto de linea n

Código: C++
  1.  
  2.         for (i = 0; i < MAXFILAS; i++)
  3.         {
  4.             fprintf( fichero, "%sn", texto [ i ]);
  5.         }
  6.  
  7.  

El otro problema es que no estas definiendo suficiente espacio para tus cadenas, tu usas #define MAXCOLUMNAS 80, como si tus lineas tuvieran 80 caracteres de longitud, y en la realidad la mas larga mide 125 caracteres de longitud, entonces deberias hacer una de 2 cosas:

1. recortar tu cadenas de manera que no pasen de 79 caracteres (hay que guardar un espacio para el fin de cadena '')

o 2. cambiar tu MAXCOLUMNAS a un valor mas grande, diria que 130, para que te cupiera toda la linea completa.

Bueno, creo que tienes bastante trabajo que hacer y corregir, espero que te sirva la ayuda y manos a la obra.

Saludos :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

patosi

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Problema con programa
« Respuesta #4 en: Martes 9 de Marzo de 2010, 13:35 »
0
Gracias por la ayuda, he modificado lo que me has comentado y ya esta todo perfecto, solo hay 2 detalles: he contado los caracteres de una linea y son 72, pero al poner maxfilas en 72, al final del texto de deja un espacio como de 10 o 15 filas y si le pongo menos de 72 no me deja el espacio al final del programa pero se me descuadran 2 lineas.. Otro fallo es a la hora de pedir las lineas a mostrar, muestra las que pido pero la ultima que se muestra se muestra a la mitad...


Un saludo.

patosi

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Problema con programa
« Respuesta #5 en: Jueves 11 de Marzo de 2010, 10:04 »
0
Buenas, te dejo como me ha quedado el codigo:
Código: Text
  1.  
  2. #include <stdio.h>
  3. #include <conio.h>
  4. #include <string.h>
  5.  
  6. #define MAXFILAS 28
  7. #define MAXCOLUMNAS 70
  8.  
  9. void IniciarMatriz ( char matriz [MAXFILAS] [MAXCOLUMNAS]);
  10. void Leer (FILE *fichero, int lineas);
  11. void Escribir (FILE *fichero, char matriz [MAXFILAS] [MAXCOLUMNAS]);
  12.  
  13. int main ( )
  14.     {
  15.        
  16.         FILE *libro=NULL;
  17.         int lineas;
  18.         char texto [ MAXFILAS ] [ MAXCOLUMNAS ];
  19.         IniciarMatriz(texto);
  20.         Escribir(libro,texto);
  21.         do{
  22.             printf("nnn Introduzca numero de lineas que desea visualizar: ('Pulse 0 para salir') n ");
  23.             scanf ("%d",&lineas);
  24.             fflush(stdin);
  25.             Leer(libro, lineas);
  26.         }while (lineas != 0);
  27.  
  28.         return 0;
  29.  
  30.     }
  31.  
  32. /* Funcion que inicia la matriz la cual contiene el texto elegido del libro. */
  33.  
  34. void IniciarMatriz (char texto [ MAXFILAS ] [ MAXCOLUMNAS ] )
  35. {
  36.     printf ("tt//////////// El Anticristo ////////////n");
  37.     strcpy(texto[ 0 ], " Todas las concepciones de la Iglesia son reconocidas por lo que son");
  38.     strcpy(texto[ 1 ], " como la mas triste acuñacion de moneda falsa que ha existido hecha ");
  39.     strcpy(texto[ 2 ], " por el hombre ,a lo largo de la historia y hasta el fin de los dias,");
  40.     strcpy(texto[ 3 ], " con el fin de desvalorizar la Naturaleza y los valores naturales:");
  41.     strcpy(texto[ 4 ], " el sacerdote mismo es reconocido como lo que es, como la mas");
  42.     strcpy(texto[ 5 ], " peligrosa especie de parasito como la verdadera araña venenosa de");
  43.     strcpy(texto[ 6 ], " la vida...Nosotros sabemos, nuestra conciencia sabe hoy, que");
  44.     strcpy(texto[ 7 ], " valen en general aquellas funestas invenciones de los sacerdotes");
  45.     strcpy(texto[ 8 ], " y de la iglesia, de que serviran,esto es,para conseguir aquel estado");
  46.     strcpy(texto[ 9 ], " de damnificacion de la humanidad, cuyo espectaculo produce nauseas");
  47.     strcpy(texto[ 10 ], " los conceptos de mas alla, juicio final, inmortalidad del alma,el");
  48.     strcpy(texto[ 11 ], " alma misma, sin instrumentos de tortura y sistemas de crueldad,en"),
  49.     strcpy(texto[ 12 ], " virtud de los cuales el sacerdote se hizo el amo y siguio siendo el");
  50.     strcpy(texto[ 13 ], " amo, Todos saben esto, y sin embargo todo sigue igual. Donde ha ido");
  51.     strcpy(texto[ 14 ], " a parar el ultimo sentimiento del decoro del respeto de si mismo");
  52.     strcpy(texto[ 15 ], " si hasta nuestros hombres de Estado, por lo demas, una especie de");
  53.     strcpy(texto[ 16 ], " hombres y de anticristianos bastante descocada en la practica,se");
  54.     strcpy(texto[ 17 ], " llamen aun hoy cristianos y tomen la comunión..Toda práctica de cada");
  55.     strcpy(texto[ 18 ], " momento, todo instinto, toda valoracion que se convierte en hecho es");
  56.     strcpy(texto[ 19 ], " hoy anticristiana;¡que aborto de falsedad debe ser el hombre moderno");
  57.     strcpy(texto[ 20 ], " para no avergonzarse todavia de llamarse cristiano! Ya la palabra");
  58.     strcpy(texto[ 21 ], " cristiano es un equivoco:en el fondo no hubo mas que un cristiano y ");
  59.     strcpy(texto[ 22 ], " este murio en la cruz.El Evangelio murio en la cruz.Lo que a partir");
  60.     strcpy(texto[ 23 ], " de aquel momento se llamo evangelio era lo contrari ode lo que el");
  61.     strcpy(texto[ 24 ], " vivio,una mala nueva,un Dysangelium. Es falso hasta el absurdo ver");
  62.     strcpy(texto[ 25 ], " la característica del cristiano en una fe,por ejemplo,en la fe de");
  63.     strcpy(texto[ 26 ], " le redencion por medio de Cristo; unicamente la practica cristiana,");
  64.     strcpy(texto[ 27 ], " el vivir como vivio,el que murio en la cruz es lo cristiano.");
  65.    
  66.        
  67. }
  68.  
  69. /* Función que escribe y almacena en el fichero el contenido del texto. */
  70.  
  71. void Escribir (FILE *fichero, char texto [ MAXFILAS ] [ MAXCOLUMNAS ])
  72.     {
  73.         int i;
  74.        
  75.        
  76.  
  77.         if ((fichero = fopen("texto.txt", "w"))== NULL)
  78.         {
  79.             printf ( "n Error al crear el fichero n");
  80.         }
  81.         else
  82.             {
  83.                 for (i = 0; i < MAXFILAS; i++)
  84.                 {
  85.                 fprintf( fichero, "%sn", texto [ i ]);
  86.                 }
  87.             }
  88.                 fclose ( fichero );
  89.                 Leer(fichero, MAXFILAS);
  90.             }
  91.    
  92.  
  93.  
  94. /* Función que lee el contenido almacenado en el texto, pide las lineas que el usuario desea ver y las imprime. */
  95.  
  96. void Leer (FILE *fichero, int lineas)
  97. {
  98.     int i;
  99.     int j;
  100.     char caracter;
  101.  
  102.    
  103.     if ((fichero = fopen("texto.txt", "r"))== NULL)
  104.     {
  105.         printf ( "n Error al crear el fichero n");
  106.     }
  107.         else
  108.             {
  109.                
  110.  
  111.             for (i = 0; i < lineas; i++)
  112.             {
  113.                 for (j = 0; j < MAXCOLUMNAS; j++)
  114.                 {
  115.                     fscanf(fichero , "%c", &caracter);
  116.                     printf("%c", caracter);
  117.                 }
  118.                
  119.             }
  120.             fclose ( fichero );
  121.         }
  122. }
  123.  
  124.  

El problema es que al final del texto antes de pedir las lineas me deja un hueco enorme y tambien que al dar las lineas, si pido 6 por ejemplo me da 6 y un cacho de la siete...

gracias Un saludo.

patosi

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Problema con programa
« Respuesta #6 en: Jueves 11 de Marzo de 2010, 10:04 »
0
Buenas, te dejo como me ha quedado el codigo:
Código: Text
  1.  
  2. #include <stdio.h>
  3. #include <conio.h>
  4. #include <string.h>
  5.  
  6. #define MAXFILAS 28
  7. #define MAXCOLUMNAS 70
  8.  
  9. void IniciarMatriz ( char matriz [MAXFILAS] [MAXCOLUMNAS]);
  10. void Leer (FILE *fichero, int lineas);
  11. void Escribir (FILE *fichero, char matriz [MAXFILAS] [MAXCOLUMNAS]);
  12.  
  13. int main ( )
  14.     {
  15.        
  16.         FILE *libro=NULL;
  17.         int lineas;
  18.         char texto [ MAXFILAS ] [ MAXCOLUMNAS ];
  19.         IniciarMatriz(texto);
  20.         Escribir(libro,texto);
  21.         do{
  22.             printf("nnn Introduzca numero de lineas que desea visualizar: ('Pulse 0 para salir') n ");
  23.             scanf ("%d",&lineas);
  24.             fflush(stdin);
  25.             Leer(libro, lineas);
  26.         }while (lineas != 0);
  27.  
  28.         return 0;
  29.  
  30.     }
  31.  
  32. /* Funcion que inicia la matriz la cual contiene el texto elegido del libro. */
  33.  
  34. void IniciarMatriz (char texto [ MAXFILAS ] [ MAXCOLUMNAS ] )
  35. {
  36.     printf ("tt//////////// El Anticristo ////////////n");
  37.     strcpy(texto[ 0 ], " Todas las concepciones de la Iglesia son reconocidas por lo que son");
  38.     strcpy(texto[ 1 ], " como la mas triste acuñacion de moneda falsa que ha existido hecha ");
  39.     strcpy(texto[ 2 ], " por el hombre ,a lo largo de la historia y hasta el fin de los dias,");
  40.     strcpy(texto[ 3 ], " con el fin de desvalorizar la Naturaleza y los valores naturales:");
  41.     strcpy(texto[ 4 ], " el sacerdote mismo es reconocido como lo que es, como la mas");
  42.     strcpy(texto[ 5 ], " peligrosa especie de parasito como la verdadera araña venenosa de");
  43.     strcpy(texto[ 6 ], " la vida...Nosotros sabemos, nuestra conciencia sabe hoy, que");
  44.     strcpy(texto[ 7 ], " valen en general aquellas funestas invenciones de los sacerdotes");
  45.     strcpy(texto[ 8 ], " y de la iglesia, de que serviran,esto es,para conseguir aquel estado");
  46.     strcpy(texto[ 9 ], " de damnificacion de la humanidad, cuyo espectaculo produce nauseas");
  47.     strcpy(texto[ 10 ], " los conceptos de mas alla, juicio final, inmortalidad del alma,el");
  48.     strcpy(texto[ 11 ], " alma misma, sin instrumentos de tortura y sistemas de crueldad,en"),
  49.     strcpy(texto[ 12 ], " virtud de los cuales el sacerdote se hizo el amo y siguio siendo el");
  50.     strcpy(texto[ 13 ], " amo, Todos saben esto, y sin embargo todo sigue igual. Donde ha ido");
  51.     strcpy(texto[ 14 ], " a parar el ultimo sentimiento del decoro del respeto de si mismo");
  52.     strcpy(texto[ 15 ], " si hasta nuestros hombres de Estado, por lo demas, una especie de");
  53.     strcpy(texto[ 16 ], " hombres y de anticristianos bastante descocada en la practica,se");
  54.     strcpy(texto[ 17 ], " llamen aun hoy cristianos y tomen la comunión..Toda práctica de cada");
  55.     strcpy(texto[ 18 ], " momento, todo instinto, toda valoracion que se convierte en hecho es");
  56.     strcpy(texto[ 19 ], " hoy anticristiana;¡que aborto de falsedad debe ser el hombre moderno");
  57.     strcpy(texto[ 20 ], " para no avergonzarse todavia de llamarse cristiano! Ya la palabra");
  58.     strcpy(texto[ 21 ], " cristiano es un equivoco:en el fondo no hubo mas que un cristiano y ");
  59.     strcpy(texto[ 22 ], " este murio en la cruz.El Evangelio murio en la cruz.Lo que a partir");
  60.     strcpy(texto[ 23 ], " de aquel momento se llamo evangelio era lo contrari ode lo que el");
  61.     strcpy(texto[ 24 ], " vivio,una mala nueva,un Dysangelium. Es falso hasta el absurdo ver");
  62.     strcpy(texto[ 25 ], " la característica del cristiano en una fe,por ejemplo,en la fe de");
  63.     strcpy(texto[ 26 ], " le redencion por medio de Cristo; unicamente la practica cristiana,");
  64.     strcpy(texto[ 27 ], " el vivir como vivio,el que murio en la cruz es lo cristiano.");
  65.    
  66.        
  67. }
  68.  
  69. /* Función que escribe y almacena en el fichero el contenido del texto. */
  70.  
  71. void Escribir (FILE *fichero, char texto [ MAXFILAS ] [ MAXCOLUMNAS ])
  72.     {
  73.         int i;
  74.        
  75.        
  76.  
  77.         if ((fichero = fopen("texto.txt", "w"))== NULL)
  78.         {
  79.             printf ( "n Error al crear el fichero n");
  80.         }
  81.         else
  82.             {
  83.                 for (i = 0; i < MAXFILAS; i++)
  84.                 {
  85.                 fprintf( fichero, "%sn", texto [ i ]);
  86.                 }
  87.             }
  88.                 fclose ( fichero );
  89.                 Leer(fichero, MAXFILAS);
  90.             }
  91.    
  92.  
  93.  
  94. /* Función que lee el contenido almacenado en el texto, pide las lineas que el usuario desea ver y las imprime. */
  95.  
  96. void Leer (FILE *fichero, int lineas)
  97. {
  98.     int i;
  99.     int j;
  100.     char caracter;
  101.  
  102.    
  103.     if ((fichero = fopen("texto.txt", "r"))== NULL)
  104.     {
  105.         printf ( "n Error al crear el fichero n");
  106.     }
  107.         else
  108.             {
  109.                
  110.  
  111.             for (i = 0; i < lineas; i++)
  112.             {
  113.                 for (j = 0; j < MAXCOLUMNAS; j++)
  114.                 {
  115.                     fscanf(fichero , "%c", &caracter);
  116.                     printf("%c", caracter);
  117.                 }
  118.                
  119.             }
  120.             fclose ( fichero );
  121.         }
  122. }
  123.  
  124.  

El problema es que al final del texto antes de pedir las lineas me deja un hueco enorme y tambien que al dar las lineas, si pido 6 por ejemplo me da 6 y un cacho de la siete...

gracias Un saludo.

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Problema con programa
« Respuesta #7 en: Viernes 12 de Marzo de 2010, 01:30 »
0
Hola patosi bueno, el problema esta aca:

Código: C++
  1.  
  2.             for (i = 0; i < lineas; i++)
  3.             {
  4.                 for (j = 0; j < MAXCOLUMNAS; j++)
  5.                 {
  6.                     fscanf(fichero , "%c", &caracter);
  7.                     printf("%c", caracter);
  8.                 }
  9.                
  10.             }
  11.  
  12.  

Mismo error de la vez pasada, estas leyendo caracter por caracter en lugar de linea por linea, cambialo por:

Código: C++
  1.  
  2.         char cadena[80];
  3.         for (i = 0; i < lineas; i++)
  4.         {
  5.             fgets(cadena, MAXCOLUMNAS + 1, fichero);
  6.             printf("%s", cadena);
  7.         }
  8.  
  9.  

Utililza fgets en lugar de fscanf, ya que si usas fscanf("%s", cadena), solamente te leera una palabra, y no toda la linea como queremos.

Espero que eso ayude.

Saludos :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

herzdark

  • Miembro activo
  • **
  • Mensajes: 38
  • Nacionalidad: ar
    • Ver Perfil
Re: Problema con programa
« Respuesta #8 en: Sábado 13 de Marzo de 2010, 23:08 »
0
no se si esto es un error bue aca te lo digo cuando haces esto:
 
Código: C
  1. void Escribir (FILE *fichero, char texto [ MAXFILAS ] [ MAXCOLUMNAS ])
  2.  
vos el archivo lo estas creando dentro de la función pero cuando la función termina el puntero a FILE queda en NULL, una solucion seria pasar el archivo asi:
Código: C
  1. void Escribir (FILE **fichero, char texto [ MAXFILAS ] [ MAXCOLUMNAS ])
  2.  
entonces lo que haces es trabajar con puntero a puntero a file y cuando la direcion que se devolvio (del file) de la funcion queda.
por eso digo no se si es un error lo que marco pero a mi me enseñaron eso ^_^  ^_^