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

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


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

Desconectado Desconectado

Mensajes: 25


Ver Perfil
Ayuda en programa con ficheros!
« en: 25 Junio 2014, 20:01 pm »

Tengo un problema con este codigo
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. cout<<"Presione cualquier tecla para escoger su categoria"<<endl;
  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. cout<<"<===============Su categoria es Historia===============>"<<endl;
  57. cout<<"Presione cualquier tecla para escoger su pregunta"<<endl;
  58. getch();
  59. doc = fopen("C:\Users\HERNAN\Desktop\prueba.txt","r");
  60. while(i<=5)
  61. w=getc(doc);
  62. if (w =='\n') printf ("\n");
  63. else
  64. printf("%c",w);
  65. fclose(doc);
  66. return 0;
  67. }
  68. int Depor()
  69. {
  70. int x,i=1,w;
  71. system ("cls");
  72. cout<<"<===============Su categoria es Ciencia===============>"<<endl;
  73. cout<<"Presione cualquier tecla para escoger su pregunta"<<endl;
  74. getch();
  75. doc = fopen("C:\Users\HERNAN\Desktop\prueba.txt","r");
  76. while(i<=5)
  77. w=getc(doc);
  78. if (w =='\n') printf ("\n");
  79. else
  80. printf("%c",w);
  81. fclose(doc);
  82. return 0;
  83. }
  84. int Cien()
  85. {
  86. int x,i=1,w;
  87. system ("cls");
  88. cout<<"<===============Su categoria es Deportes===============>"<<endl;
  89. cout<<"Presione cualquier tecla para escoger su pregunta"<<endl;
  90. getch();
  91. doc = fopen("C:\Users\HERNAN\Desktop\prueba.txt","r");
  92. while(i<=5)
  93. w=getc(doc);
  94. if (w =='\n') printf ("\n");
  95. else
  96. printf("%c",w);
  97. fclose(doc);
  98. return 0;
  99. }
  100. int Geo()
  101. {
  102. int x,i=1,w;
  103. system ("cls");
  104. cout<<"<===============Su categoria es Geografia===============>"<<endl;
  105. cout<<"Presione cualquier tecla para escoger su pregunta"<<endl;
  106. getch();
  107. doc = fopen("C:\Users\HERNAN\Desktop\prueba.txt","r");
  108. while(i<=5)
  109. w=getc(doc);
  110. if (w =='\n') printf ("\n");
  111. else
  112. printf("%c",w);
  113. fclose(doc);
  114. return 0;
  115. }
  116.  
  117.  

El problema en la ejecución es este



[MOD] para publicar código, usa la etiqueta GeShi correspondiente. Gracias.

Debes poner titulos descriptivos del tema, "Ayuda!" no lo es, leete las Reglas del Foro.



« Última modificación: 30 Junio 2014, 03:17 am por Juan821 » En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Ayuda!
« Respuesta #1 en: 25 Junio 2014, 21:59 pm »

1. O usas los mecanismos de entrada salida de C (printf, scanf) o los de C++ (cin, cout)... pero por favor, no los mezcles. Puede dar problemas.

2. No uses conio.h... más información al respecto aqui

3. No uses variables globales. Muy pocas veces es necesario su uso. Además hay que tener cuidado con ellas, pueden ser problemáticas y dificultan la lectura del código.

4. ¿Y si no se ha podido abrir el fichero?

Código
  1. doc = fopen("C:\Users\HERNAN\Desktop\prueba.txt","r");
  2. while(i<=5)
  3. w=getc(doc); // Y si doc == NULL???

Te faltan comprobaciones ahí.

5. Si un if, un else, un while o un do-while ocupan más de una línea hay que usar llaves:

Código
  1. while(i<=5)
  2. w=getc(doc);
  3. if (w =='\n') printf ("\n");
  4. else
  5. printf("%c",w);

Ese código se va a quedar atascado en las dos primeras líneas. Como no hay llaves el while afecta únicamente a w=getc(doc).

Además, aunque pusieses llaves no estás incrementando i... luego seguirías en un bucle sin fin que finalizaría con error al terminar de leer todo el archivo.

6. Los nombres de las variables salen gratis... pon nombres que te den una idea de la función de dicha variable.

No es lo mismo:
Código
  1. if ( i > j || x < w )

que:
Código
  1. if ( velocidad > velocidadMaxima || fechaITV < hoy )

Seguro que con la segunda opción es más facil hacerse una idea de qué es lo que hace el código.

Puede que haya algún otro error... pero como tienes que darle un repaso serio al programa no merece la pena seguir mirando.


En línea

Juan821

Desconectado Desconectado

Mensajes: 25


Ver Perfil
Re: Ayuda!
« Respuesta #2 en: 25 Junio 2014, 23:57 pm »

Ya hice lo que me dijiste pero persiste el error incluso puse para cuando doc sea null porque ahora me pone siempre error en la apertura del archivo, pero dime como soluciono lo del fichero y la librería la necesito para que se pause el programa porque con system pause no me gusta lo del printf no lo uso porque no me deja imprimir, la variable la necesito porque si responde una pregunta mal, hare que se salga del ciclo el programa todavia no esta completo

« Última modificación: 30 Junio 2014, 04:08 am por Juan821 » En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.966


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Ayuda!
« Respuesta #3 en: 26 Junio 2014, 08:14 am »

El path esta mal, no mire nada mas ya que eso salta a la vista, la \ se usa para secuencias de escape, la que corresponde usar en tu caso es \\ .
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Ayuda!
« Respuesta #4 en: 26 Junio 2014, 08:35 am »

El path esta mal, no mire nada mas ya que eso salta a la vista, la \ se usa para secuencias de escape, la que corresponde usar en tu caso es \\ .

Confiaba en que al ver que no se abrían los archivos, investigase un poco el tema y acabase viendo lo de las barras el solo.
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.966


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Ayuda!
« Respuesta #5 en: 26 Junio 2014, 09:22 am »

Confiaba en que al ver que no se abrían los archivos, investigase un poco el tema y acabase viendo lo de las barras el solo.

Le dijiste, como corresponde, que no usara conio.h y ahi sigue ... yo no confiaria tanto  ;D
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Juan821

Desconectado Desconectado

Mensajes: 25


Ver Perfil
Re: Ayuda!
« Respuesta #6 en: 26 Junio 2014, 21:55 pm »

Le dijiste, como corresponde, que no usara conio.h y ahi sigue ... yo no confiaria tanto  ;D

Haber el error ya no es ese nisiquiera ya lo solucione era el users que no debe ir ahí porque es un comando prederminado, lo del conio es porque lo necesito y ahora mi problema es que el programa cuando abre el archivo entra en un bucle infinito y no sale porque no se todavia
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Ayuda!
« Respuesta #7 en: 27 Junio 2014, 08:17 am »

Haber el error ya no es ese nisiquiera ya lo solucione era el users que no debe ir ahí porque es un comando prederminado

O no te sabes explicar o no sabes lo que estás haciendo... lo que te dijo Eternal es

El path esta mal, no mire nada mas ya que eso salta a la vista, la \ se usa para secuencias de escape, la que corresponde usar en tu caso es \\ .

Es decir, que sustituyeses los símbolos '\' por '\\', ya que '\' se utiliza para secuencias de escape, es decir, se interpreta ese carácter y el siguiente como uno solo que además tiene un efecto especial: '\n' salto de línea, '\t' tabulador, etc.

Dicho en cristiano. Tu ruta debería quedar: C:\\Users\\HERNAN\\Desktop\\prueba.txt

lo del conio es porque lo necesito

Lo necesitas por... espera, no me lo digas... getch??

hay mil alternativas a getch... tu por ejemplo que estás usando C++ puedes recurrir, por ejemplo, a "std::cin.ignore()". Tiene la ventaja de que es una solución estándar y multiplataforma. Ahora, si prefieres coger malos hábitos nada más empezar tú mismo, es tu decisión.

Por cierto, si respondo a un mensaje con dudas lo menos que espero es que el interesado se tome la molestia de leer mi respuesta completa... por respeto y deferencia más que nada. Te lo digo porque te puse el enlace a un post en el que se indican malas prácticas en C y C++, además de explicar los motivos explica también diferentes posibilidades y soluciones. Por tu forma de hablar entiendo que has pasado de ese punto completamente... si no vas a leer las respuetas por que no te gustan... ¿para qué pides ayuda?

y ahora mi problema es que el programa cuando abre el archivo entra en un bucle infinito y no sale porque no se todavia

Pues mira, si te molestases en leer las respuestas de la gente lo sabrías. Además también deberías aprender a usar el depurador de código... al principio cuesta cogerle el punto, pero en cuanto adquieres soltura descubres lo práctico y útil que es: te permite evaluar y modificar variables, ves la secuencia de ejecución, puedes saltar instrucciones...


En línea

Juan821

Desconectado Desconectado

Mensajes: 25


Ver Perfil
Re: Ayuda!
« Respuesta #8 en: 27 Junio 2014, 21:43 pm »

Pues mira, si te molestases en leer las respuestas de la gente lo sabrías. Además también deberías aprender a usar el depurador de código... al principio cuesta cogerle el punto, pero en cuanto adquieres soltura descubres lo práctico y útil que es: te permite evaluar y modificar variables, ves la secuencia de ejecución, puedes saltar instrucciones...



Ok coregire lo del getch pero lo del bucle infinito ya puse a aumentar la i osea no estoy habalando del bucle del while de la funcion principal, estoy hablando del siclo que hay en las otras funciones el while y quitare la conio.h despues pero ese es mi problema mas grande si estoy aumentando cada vez que hay salto de linea porque no se detiene el programa?
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Ayuda!
« Respuesta #9 en: 28 Junio 2014, 16:26 pm »

si por aumentar i te refieres a i=1+1 ... que es como tienes en tu código... ahí i va a valer SIEMPRE 2... luego NUNCA va a alcanzar el valor necesario para que el código abandone el bucle... ahí es donde entra la parte de aprender a usar el depurador... si usas el depurador este problema lo ves en seguida porque te das cuenta de que i no cambia su valor en la vida.
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Programa para editar ficheros exe « 1 2 »
Ingeniería Inversa
consejo 11 28,424 Último mensaje 11 Marzo 2008, 08:20 am
por Shaddy
problema con programa de ficheros en c
Programación C/C++
Quake-man 1 2,528 Último mensaje 10 Septiembre 2010, 18:39 pm
por nicolas_cof
programa con ficheros
Programación C/C++
tumayy 5 3,325 Último mensaje 25 Octubre 2011, 06:22 am
por do-while
Ayuda programa con ficheros « 1 2 »
Programación C/C++
ankora45 16 6,274 Último mensaje 22 Septiembre 2012, 14:42 pm
por diegoCmC
ayuda con un programa de ficheros
Programación C/C++
aradxc56 1 1,964 Último mensaje 13 Marzo 2019, 16:36 pm
por K-YreX
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines