Programación General > C/C++
Problema con programa
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
[*] Página Anterior
Ir a la versión completa