Programación General > C/C++

 Problema con programa

<< < (2/2)

patosi:
Buenas, te dejo como me ha quedado el codigo:

--- Código: Text --- #include <stdio.h>#include <conio.h>#include <string.h> #define MAXFILAS 28#define MAXCOLUMNAS 70 void IniciarMatriz ( char matriz [MAXFILAS] [MAXCOLUMNAS]);void Leer (FILE *fichero, int lineas);void Escribir (FILE *fichero, char matriz [MAXFILAS] [MAXCOLUMNAS]); int main ( )    {                FILE *libro=NULL;        int lineas;        char texto [ MAXFILAS ] [ MAXCOLUMNAS ];        IniciarMatriz(texto);        Escribir(libro,texto);        do{            printf("nnn Introduzca numero de lineas que desea visualizar: ('Pulse 0 para salir') n ");            scanf ("%d",&lineas);            fflush(stdin);            Leer(libro, lineas);        }while (lineas != 0);         return 0;     } /* Funcion que inicia la matriz la cual contiene el texto elegido del libro. */ void IniciarMatriz (char texto [ MAXFILAS ] [ MAXCOLUMNAS ] ){    printf ("tt//////////// El Anticristo ////////////n");    strcpy(texto[ 0 ], " Todas las concepciones de la Iglesia son reconocidas por lo que son");    strcpy(texto[ 1 ], " como la mas triste acuñacion de moneda falsa que ha existido hecha ");    strcpy(texto[ 2 ], " por el hombre ,a lo largo de la historia y hasta el fin de los dias,");    strcpy(texto[ 3 ], " con el fin de desvalorizar la Naturaleza y los valores naturales:");    strcpy(texto[ 4 ], " el sacerdote mismo es reconocido como lo que es, como la mas");    strcpy(texto[ 5 ], " peligrosa especie de parasito como la verdadera araña venenosa de");    strcpy(texto[ 6 ], " la vida...Nosotros sabemos, nuestra conciencia sabe hoy, que");    strcpy(texto[ 7 ], " valen en general aquellas funestas invenciones de los sacerdotes");    strcpy(texto[ 8 ], " y de la iglesia, de que serviran,esto es,para conseguir aquel estado");    strcpy(texto[ 9 ], " de damnificacion de la humanidad, cuyo espectaculo produce nauseas");    strcpy(texto[ 10 ], " los conceptos de mas alla, juicio final, inmortalidad del alma,el");    strcpy(texto[ 11 ], " alma misma, sin instrumentos de tortura y sistemas de crueldad,en"),    strcpy(texto[ 12 ], " virtud de los cuales el sacerdote se hizo el amo y siguio siendo el");    strcpy(texto[ 13 ], " amo, Todos saben esto, y sin embargo todo sigue igual. Donde ha ido");    strcpy(texto[ 14 ], " a parar el ultimo sentimiento del decoro del respeto de si mismo");    strcpy(texto[ 15 ], " si hasta nuestros hombres de Estado, por lo demas, una especie de");    strcpy(texto[ 16 ], " hombres y de anticristianos bastante descocada en la practica,se");    strcpy(texto[ 17 ], " llamen aun hoy cristianos y tomen la comunión..Toda práctica de cada");    strcpy(texto[ 18 ], " momento, todo instinto, toda valoracion que se convierte en hecho es");    strcpy(texto[ 19 ], " hoy anticristiana;¡que aborto de falsedad debe ser el hombre moderno");    strcpy(texto[ 20 ], " para no avergonzarse todavia de llamarse cristiano! Ya la palabra");    strcpy(texto[ 21 ], " cristiano es un equivoco:en el fondo no hubo mas que un cristiano y ");    strcpy(texto[ 22 ], " este murio en la cruz.El Evangelio murio en la cruz.Lo que a partir");    strcpy(texto[ 23 ], " de aquel momento se llamo evangelio era lo contrari ode lo que el");    strcpy(texto[ 24 ], " vivio,una mala nueva,un Dysangelium. Es falso hasta el absurdo ver");    strcpy(texto[ 25 ], " la característica del cristiano en una fe,por ejemplo,en la fe de");    strcpy(texto[ 26 ], " le redencion por medio de Cristo; unicamente la practica cristiana,");    strcpy(texto[ 27 ], " el vivir como vivio,el que murio en la cruz es lo cristiano.");            } /* Función que escribe y almacena en el fichero el contenido del texto. */ void Escribir (FILE *fichero, char texto [ MAXFILAS ] [ MAXCOLUMNAS ])    {        int i;                         if ((fichero = fopen("texto.txt", "w"))== NULL)        {             printf ( "n Error al crear el fichero n");        }        else            {                for (i = 0; i < MAXFILAS; i++)                {                fprintf( fichero, "%sn", texto [ i ]);                }            }                fclose ( fichero );                Leer(fichero, MAXFILAS);            }      /* 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 lineas){    int i;    int j;    char caracter;         if ((fichero = fopen("texto.txt", "r"))== NULL)    {        printf ( "n Error al crear el fichero n");    }        else            {                             for (i = 0; i < lineas; i++)            {                for (j = 0; j < MAXCOLUMNAS; j++)                {                    fscanf(fichero , "%c", &caracter);                    printf("%c", caracter);                }                            }            fclose ( fichero );        }}  
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:
Buenas, te dejo como me ha quedado el codigo:

--- Código: Text --- #include <stdio.h>#include <conio.h>#include <string.h> #define MAXFILAS 28#define MAXCOLUMNAS 70 void IniciarMatriz ( char matriz [MAXFILAS] [MAXCOLUMNAS]);void Leer (FILE *fichero, int lineas);void Escribir (FILE *fichero, char matriz [MAXFILAS] [MAXCOLUMNAS]); int main ( )    {                FILE *libro=NULL;        int lineas;        char texto [ MAXFILAS ] [ MAXCOLUMNAS ];        IniciarMatriz(texto);        Escribir(libro,texto);        do{            printf("nnn Introduzca numero de lineas que desea visualizar: ('Pulse 0 para salir') n ");            scanf ("%d",&lineas);            fflush(stdin);            Leer(libro, lineas);        }while (lineas != 0);         return 0;     } /* Funcion que inicia la matriz la cual contiene el texto elegido del libro. */ void IniciarMatriz (char texto [ MAXFILAS ] [ MAXCOLUMNAS ] ){    printf ("tt//////////// El Anticristo ////////////n");    strcpy(texto[ 0 ], " Todas las concepciones de la Iglesia son reconocidas por lo que son");    strcpy(texto[ 1 ], " como la mas triste acuñacion de moneda falsa que ha existido hecha ");    strcpy(texto[ 2 ], " por el hombre ,a lo largo de la historia y hasta el fin de los dias,");    strcpy(texto[ 3 ], " con el fin de desvalorizar la Naturaleza y los valores naturales:");    strcpy(texto[ 4 ], " el sacerdote mismo es reconocido como lo que es, como la mas");    strcpy(texto[ 5 ], " peligrosa especie de parasito como la verdadera araña venenosa de");    strcpy(texto[ 6 ], " la vida...Nosotros sabemos, nuestra conciencia sabe hoy, que");    strcpy(texto[ 7 ], " valen en general aquellas funestas invenciones de los sacerdotes");    strcpy(texto[ 8 ], " y de la iglesia, de que serviran,esto es,para conseguir aquel estado");    strcpy(texto[ 9 ], " de damnificacion de la humanidad, cuyo espectaculo produce nauseas");    strcpy(texto[ 10 ], " los conceptos de mas alla, juicio final, inmortalidad del alma,el");    strcpy(texto[ 11 ], " alma misma, sin instrumentos de tortura y sistemas de crueldad,en"),    strcpy(texto[ 12 ], " virtud de los cuales el sacerdote se hizo el amo y siguio siendo el");    strcpy(texto[ 13 ], " amo, Todos saben esto, y sin embargo todo sigue igual. Donde ha ido");    strcpy(texto[ 14 ], " a parar el ultimo sentimiento del decoro del respeto de si mismo");    strcpy(texto[ 15 ], " si hasta nuestros hombres de Estado, por lo demas, una especie de");    strcpy(texto[ 16 ], " hombres y de anticristianos bastante descocada en la practica,se");    strcpy(texto[ 17 ], " llamen aun hoy cristianos y tomen la comunión..Toda práctica de cada");    strcpy(texto[ 18 ], " momento, todo instinto, toda valoracion que se convierte en hecho es");    strcpy(texto[ 19 ], " hoy anticristiana;¡que aborto de falsedad debe ser el hombre moderno");    strcpy(texto[ 20 ], " para no avergonzarse todavia de llamarse cristiano! Ya la palabra");    strcpy(texto[ 21 ], " cristiano es un equivoco:en el fondo no hubo mas que un cristiano y ");    strcpy(texto[ 22 ], " este murio en la cruz.El Evangelio murio en la cruz.Lo que a partir");    strcpy(texto[ 23 ], " de aquel momento se llamo evangelio era lo contrari ode lo que el");    strcpy(texto[ 24 ], " vivio,una mala nueva,un Dysangelium. Es falso hasta el absurdo ver");    strcpy(texto[ 25 ], " la característica del cristiano en una fe,por ejemplo,en la fe de");    strcpy(texto[ 26 ], " le redencion por medio de Cristo; unicamente la practica cristiana,");    strcpy(texto[ 27 ], " el vivir como vivio,el que murio en la cruz es lo cristiano.");            } /* Función que escribe y almacena en el fichero el contenido del texto. */ void Escribir (FILE *fichero, char texto [ MAXFILAS ] [ MAXCOLUMNAS ])    {        int i;                         if ((fichero = fopen("texto.txt", "w"))== NULL)        {             printf ( "n Error al crear el fichero n");        }        else            {                for (i = 0; i < MAXFILAS; i++)                {                fprintf( fichero, "%sn", texto [ i ]);                }            }                fclose ( fichero );                Leer(fichero, MAXFILAS);            }      /* 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 lineas){    int i;    int j;    char caracter;         if ((fichero = fopen("texto.txt", "r"))== NULL)    {        printf ( "n Error al crear el fichero n");    }        else            {                             for (i = 0; i < lineas; i++)            {                for (j = 0; j < MAXCOLUMNAS; j++)                {                    fscanf(fichero , "%c", &caracter);                    printf("%c", caracter);                }                            }            fclose ( fichero );        }}  
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:
Hola patosi bueno, el problema esta aca:


--- Código: C++ ---             for (i = 0; i < lineas; i++)            {                for (j = 0; j < MAXCOLUMNAS; j++)                {                    fscanf(fichero , "%c", &caracter);                    printf("%c", caracter);                }                           }  
Mismo error de la vez pasada, estas leyendo caracter por caracter en lugar de linea por linea, cambialo por:


--- Código: C++ ---         char cadena[80];        for (i = 0; i < lineas; i++)        {            fgets(cadena, MAXCOLUMNAS + 1, fichero);            printf("%s", cadena);        }  
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 :)

herzdark:
no se si esto es un error bue aca te lo digo cuando haces esto:
 
--- Código: C ---void Escribir (FILE *fichero, char texto [ MAXFILAS ] [ MAXCOLUMNAS ]) 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 ---void Escribir (FILE **fichero, char texto [ MAXFILAS ] [ MAXCOLUMNAS ]) 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 ^_^  ^_^

Navegación

[0] Índice de Mensajes

[*] Página Anterior

Ir a la versión completa