La verdad es que estoy un poco desentrenado con el C, pero echando una vista rápida veo lo siguente:
1- Al final del while tienes un ';' eso quiere decir que leera el fichero hasta acabar y listo
2-Suponiendo que
En realidad quiera decir
Nota: Ver que 1+1 es 2 siempre y no tiene ningun sentido.
2.1- La función His() tiene dos getc ¿para qué?
2.2- Las funciones Cien(), depor(), geo()
Si analizas un poco ese código veras que hace la primera iteración porque i<=5, i = 1. Luego leerá todo el fichero hasta el final y pueden ocurrir dos cosas:
a) Que hacen menos de 5 saltos de linea y vuelva a iterar para leer un fichero cuyo puntero está al final
b) Que hayan 5 o mas saltos de linea y no haga nada
En cualquiera de los casos no tiene sentido
3- Hay variables que no se usan
4- Usas C, pero tienes cabeceras y espacios de nombres del C++. Deberias de decidir en que lo vas ha hacer.
5- conio.h es lo peor de lo peor. Exceptuando que te obliguen a usar algún compilador obsoleto como Turbo C no deberias de emplearla.
Consejos:
1- Ya que estas usando llamadas al sistema ....
Sustituyelo por un system("pause"); si quieres adecua el mensaje para que tenga sentido
2- Cuando ejecutes el programa hazlo desde la consola y no desde el compilador así cuando acabe la ejecución no perderas la ventana del entorno y puedes evitar algunos "pause"
3- Al menos hasta que no sepas que te funciona correctamente coloca los ficheros en la misma carpeta donde se encuentre el ejecutable
4-
Es equivalente a:
En el caso de que estes contando los saltos de linea por alguna razón:
5- La lectura del fichero deberá de ser algo como
6- Imaghino que al hacer el codigo te habras dado cuenta que las funciones son muy parecidas, por no decir iguales, a excepcion del fichero que abres. La prueba es que hiciste una y el resto es un copia pega. Mi propuesta es que no te compliques que trabajes lo menos posible siempre que puedas, que simplifiques las cosas.
Haz una sola funcion a la que le pases el nombre del fichero y la llames las veces que necesites con el argumento (nombre del fichero) necesario.
La funcion quedaría tal que:
Obviamente la llamada seria tal que:
Y por supuesto se puede hacer más profesional, pero siempre hay que empezar por lo básico la experiencia es lo que necesitas
En realidad tampoco te puedo decir mucho más porque no sé que quieres hacer ni cual va a ser la escructura del fichero ni nada
1- Al final del while tienes un ';' eso quiere decir que leera el fichero hasta acabar y listo
2-Suponiendo que
Código (c) [Seleccionar]
.........printf ("\n");
.........i=1+1;
En realidad quiera decir
Código (c) [Seleccionar]
.........printf ("\n");
.........i=i+1;
Nota: Ver que 1+1 es 2 siempre y no tiene ningun sentido.
2.1- La función His() tiene dos getc ¿para qué?
2.2- Las funciones Cien(), depor(), geo()
Código (c) [Seleccionar]
while(i<=5)
{
...while((w=getc(doc)) != EOF);
...if (w =='\n')
......{
.........printf ("\n");
.........i=1+1;
......}
...else printf("%c",w);
}
Si analizas un poco ese código veras que hace la primera iteración porque i<=5, i = 1. Luego leerá todo el fichero hasta el final y pueden ocurrir dos cosas:
a) Que hacen menos de 5 saltos de linea y vuelva a iterar para leer un fichero cuyo puntero está al final
b) Que hayan 5 o mas saltos de linea y no haga nada
En cualquiera de los casos no tiene sentido
3- Hay variables que no se usan
4- Usas C, pero tienes cabeceras y espacios de nombres del C++. Deberias de decidir en que lo vas ha hacer.
5- conio.h es lo peor de lo peor. Exceptuando que te obliguen a usar algún compilador obsoleto como Turbo C no deberias de emplearla.
Consejos:
1- Ya que estas usando llamadas al sistema ....
Código (c) [Seleccionar]
printf("Presione cualquier tecla para escoger su categoria");
getch();
Sustituyelo por un system("pause"); si quieres adecua el mensaje para que tenga sentido
2- Cuando ejecutes el programa hazlo desde la consola y no desde el compilador así cuando acabe la ejecución no perderas la ventana del entorno y puedes evitar algunos "pause"
3- Al menos hasta que no sepas que te funciona correctamente coloca los ficheros en la misma carpeta donde se encuentre el ejecutable
4-
Código (c) [Seleccionar]
if (w =='\n')
{
...printf ("\n");
...i=i+1;
}
else
... printf("%c",w);
Es equivalente a:
Código (c) [Seleccionar]
printf("%c",w);
En el caso de que estes contando los saltos de linea por alguna razón:
Código (c) [Seleccionar]
if (w =='\n')
...i++;
else
... printf("%c",w);
5- La lectura del fichero deberá de ser algo como
Código (c) [Seleccionar]
while((w=getc(doc)) != EOF);
{
...printf("%c",w);
}
fclose(doc);
6- Imaghino que al hacer el codigo te habras dado cuenta que las funciones son muy parecidas, por no decir iguales, a excepcion del fichero que abres. La prueba es que hiciste una y el resto es un copia pega. Mi propuesta es que no te compliques que trabajes lo menos posible siempre que puedas, que simplifiques las cosas.
Haz una sola funcion a la que le pases el nombre del fichero y la llames las veces que necesites con el argumento (nombre del fichero) necesario.
La funcion quedaría tal que:
Código (c) [Seleccionar]
int Funcion(char *fichero, char *categoria)
{
...int x,i=1,w;
...system ("cls");
...printf("\n <===============Su categoria es %s===============> \n", categoria);
...system("pause");
...doc = fopen(fichero,"r");
/** Resto del código **/
Obviamente la llamada seria tal que:
Código (c) [Seleccionar]
Funcion ("historia.txt", "Historia");
Y por supuesto se puede hacer más profesional, pero siempre hay que empezar por lo básico la experiencia es lo que necesitas
En realidad tampoco te puedo decir mucho más porque no sé que quieres hacer ni cual va a ser la escructura del fichero ni nada