elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda en un programa del bloc de notas
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda en un programa del bloc de notas  (Leído 2,628 veces)
Juan821

Desconectado Desconectado

Mensajes: 25


Ver Perfil
Ayuda en un programa del bloc de notas
« en: 26 Junio 2014, 00:43 am »

Quiero saber porque luego de llegar a funciones si pasa a la funcion his o cualquiera no pasa nada en vez de imprimirme mi documento

Código
  1. #include <iostream>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include <conio.h>
  5. #include <stdio.h>
  6. FILE *doc;
  7. using namespace std;
  8. int His();
  9. int Cien();
  10. int Depor();
  11. int Geo();
  12. int c=1;
  13. int main()
  14. {
  15. int s,tot,u=0;
  16. srand(time(NULL));
  17. while (c==1)
  18. {
  19. system ("cls");
  20. printf("Presione cualquier tecla para escoger su categoria");
  21. getch();
  22. s=rand()% 4 + 1;
  23.  
  24. switch (s)
  25. {
  26. case 1:
  27. {
  28. His();
  29. break;
  30. }
  31. case 2:
  32. {
  33. Cien();
  34. break;
  35. }
  36. case 3:
  37. {
  38. Depor();
  39. break;
  40. }
  41. case 4:
  42. {
  43. Geo();
  44. break;
  45. }
  46. }
  47. }
  48. system ("pause");
  49. return 0;
  50. }
  51.  
  52. int His()
  53. {
  54. int x,i=1,w;
  55. system ("cls");
  56. printf("\n <===============Su categoria es Historia===============> \n");
  57. printf("\n Presione cualquier tecla para escoger su pregunta \n");
  58. getch();
  59. doc = fopen("D:\prueba.txt","r");
  60. if(doc == NULL)
  61. {
  62. printf("\n error en la apertura del archivo \n");
  63. system ("pause");
  64. return 1;
  65. }
  66. while((w=getc(doc)) != EOF);
  67. {
  68. ;
  69. if (w =='\n')
  70. {
  71. printf ("\n");
  72. i=1+1;
  73. }
  74. else printf("%c",w);
  75. }
  76. fclose(doc);
  77. return 0;
  78. }
  79. int Depor()
  80. {
  81. int x,i=1,w;
  82. system ("cls");
  83. printf("\n <===============Su categoria es Ciencias===============> \n");
  84. printf("\n Presione cualquier tecla para escoger su pregunta \n");
  85. getch();
  86. doc = fopen("D:\prueba.txt","r");
  87. if(doc == NULL)
  88. {
  89. printf("\n error en la apertura del archivo \n");
  90. system ("pause");
  91. return 1;
  92. }
  93. while((w=getc(doc)) != EOF);
  94. {
  95. w=getc(doc);
  96. if (w =='\n')
  97. {
  98. printf ("\n");
  99. i=1+1;
  100. }
  101. else printf("%c",w);
  102. }
  103. fclose(doc);
  104. return 0;
  105. }
  106. int Cien()
  107. {
  108. int x,i=1,w;
  109. system ("cls");
  110. printf("\n <===============Su categoria es Deportes===============> \n");
  111. printf("\n Presione cualquier tecla para escoger su pregunta \n");
  112. getch();
  113. doc = fopen("D:\prueba.txt","r");
  114. if(doc == NULL)
  115. {
  116. printf("\n error en la apertura del archivo \n");
  117. system ("pause");
  118. return 1;
  119. }
  120. while(i<=5)
  121. {
  122. while((w=getc(doc)) != EOF);
  123. if (w =='\n')
  124. {
  125. printf ("\n");
  126. i=1+1;
  127. }
  128. else printf("%c",w);
  129. }
  130. fclose(doc);
  131. return 0;
  132. }
  133. int Geo()
  134. {
  135. int x,i=1,w;
  136. system ("cls");
  137. printf("\n <===============Su categoria es Geografia===============> \n");
  138. printf("\n Presione cualquier tecla para escoger su pregunta \n");
  139. getch();
  140. doc = fopen("D:\prueba.txt","r");
  141. if(doc == NULL)
  142. {
  143. printf("\n error en la apertura del archivo \n");
  144. system ("pause");
  145. return 1;
  146. }
  147. while(i<=5)
  148. {
  149. while((w=getc(doc)) != EOF);
  150. if (w =='\n')
  151. {
  152. printf ("\n");
  153. i=1+1;
  154. }
  155. else printf("%c",w);
  156. }
  157. fclose(doc);
  158. return 0;
  159. }



« Última modificación: 26 Junio 2014, 00:48 am por Juan821 » En línea

MeCraniDOS


Desconectado Desconectado

Mensajes: 337


Sr. Glass


Ver Perfil
Re: Ayuda en un programa del bloc de notas
« Respuesta #1 en: 26 Junio 2014, 01:36 am »

Código
  1. while((w=getc(doc)) != EOF);

Quita el punto y coma  :rolleyes:

Saludos


En línea

"La física es el sistema operativo del Universo"
     -- Steven R Garman
Flakito81


Desconectado Desconectado

Mensajes: 519



Ver Perfil
Re: Ayuda en un programa del bloc de notas
« Respuesta #2 en: 26 Junio 2014, 02:02 am »

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
Código
  1. .........printf ("\n");
  2. .........i=1+1;
  3.  
En realidad quiera decir
Código
  1. .........printf ("\n");
  2. .........i=i+1;
  3.  
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
  1. while(i<=5)
  2. {
  3. ...while((w=getc(doc)) != EOF);
  4. ...if (w =='\n')
  5. ......{
  6. .........printf ("\n");
  7. .........i=1+1;
  8. ......}
  9. ...else printf("%c",w);
  10. }
  11.  
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
  1. printf("Presione cualquier tecla para escoger su categoria");
  2.  
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
  1. if (w =='\n')
  2. {
  3. ...printf ("\n");
  4. ...i=i+1;
  5. }
  6. else
  7. ... printf("%c",w);
  8.  

Es equivalente a:
Código
  1. printf("%c",w);
  2.  

En el caso de que estes contando los saltos de linea por alguna razón:
Código
  1. if (w =='\n')
  2. ...i++;
  3. else
  4. ... printf("%c",w);
  5.  

5- La lectura del fichero deberá de ser algo como
Código
  1. while((w=getc(doc)) != EOF);
  2. {
  3. ...printf("%c",w);
  4. }
  5. fclose(doc);
  6.  

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
  1. int Funcion(char *fichero, char *categoria)
  2. {
  3. ...int x,i=1,w;
  4. ...system ("cls");
  5. ...printf("\n <===============Su categoria es %s===============> \n", categoria);
  6. ...system("pause");
  7. ...doc = fopen(fichero,"r");
  8. /** Resto del código **/
  9.  


Obviamente la llamada seria tal que:
Código
  1. Funcion ("historia.txt", "Historia");
  2.  

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
« Última modificación: 26 Junio 2014, 02:06 am por Flakito81 » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines