Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: sinsombra_666 en 25 Septiembre 2010, 18:31 pm



Título: Reloj en C
Publicado por: sinsombra_666 en 25 Septiembre 2010, 18:31 pm
Bueno el caso es que creeo que esta bien, el problema es que no e consegido que el reloj deje de mostrar sus horas y minu y segundos anteriores, en la maldita shell haber si alguien me puede echar una manita.




Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4.  
  5.  
  6.  
  7. void reloj(int h,int m,int s){
  8.  
  9. int i,a;
  10.  
  11.  
  12.  
  13.  
  14. for (; ;){  
  15.  
  16. for (a=0; a<=61; a++){
  17.  
  18. sleep(1000);
  19. s++;
  20.  
  21.  
  22. if (s==60){
  23.  
  24. m++;
  25. s = 0;          
  26.  
  27. }
  28.  
  29.  
  30. if (m==60){
  31.  
  32. m = 0;
  33. h++;          
  34.  
  35.  
  36.  
  37. }
  38.  
  39. if (h==24){
  40.  
  41. h = 0;
  42.  
  43. }
  44. printf("\n");
  45. printf(" H ");
  46. printf("M ");
  47. printf("S\n\n ");
  48. printf("%i %i %i\n",h,m,s);
  49.  
  50.  
  51.  
  52. }
  53.  
  54.  
  55. }
  56. }  
  57.  
  58.  
  59.  
  60.  
  61. main()
  62. {
  63.  
  64. reloj(23,59,45);
  65.  
  66.  getch();
  67.  
  68. }
  69.  
  70.  


Título: Re: Reloj en C
Publicado por: Ari Slash en 25 Septiembre 2010, 19:45 pm
hola
indeta un poco tu codigo no se entiende nada
sino me equivoco la funcion sleep esta en windows.h? como te funciona?

para borrar pantalla puedes incluir la biblioteca conio.h y usar la funcion clrscr()
lo unico malo de esta solucion es que no es portable te funcionara solo bajo windows
tambien puedes usar system("cls")

y para linux puedes usar system("clear"), creo que por esto te funciona sleep sin la biblioteca porque lo usas en linux


saludos


Título: Re: Reloj en C
Publicado por: Mr.Blue en 25 Septiembre 2010, 19:54 pm
getch esta en conio.h. pero es mejor usar getchar (); que esta en stdio.h
sleep  no esta en stdlib? o en windows?


for (a=0; a<=61; a++)

aca deberia ser a<61 o a<=60  

PD: la hora no va a ser la correcta, mas q nada vas a ver el tiempo q el el programa esta corriendo.


Título: Re: Reloj en C
Publicado por: Horricreu en 25 Septiembre 2010, 20:02 pm
sleep() es no es standard.

Saludos :P


Título: Re: Reloj en C
Publicado por: sinsombra_666 en 25 Septiembre 2010, 20:12 pm
umm me estays liando con las librerias, el codigo se copila y ejecuta perfectamente con esas librerias, pruevenlo en devc++9.9.2, lo de clrscr ya lo e provado, ya veo que no se entiende bien el codigo :

Código
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5.  
  6.  
  7.  
  8. void reloj(int h,int m,int s){  // aqui declaro la funcion con tres var tipo int hora, minuto y segundo
  9.  
  10. int i,a;  // declaro var locales para mi funcion, que se utilizan en los bucles
  11.  
  12.  
  13.  
  14.  
  15. for (; ;){  // creeo un bucle infinito como padre
  16.  
  17. for (a=0; a<=61; a++){
  18.  
  19. sleep(1000); // hasta que no pase 1 segundo s o segundo no aumentara en 1
  20. s++;
  21.  
  22.  
  23. if (s==60){  // cuando s o segundo sea 60 aumenta m, minuto y s, segundo vuelve a cero, infinitamente
  24.  
  25. m++;
  26. s = 0;          
  27.  
  28. }
  29.  
  30.  
  31. if (m==60){  // cuando m, minuto llege a 60 vuelve a 0 y aumenta en 1 h, hora
  32.  
  33. m = 0;
  34. h++;          
  35.  
  36.  
  37.  
  38. }
  39.  
  40. if (h==24){ // mas de lo mismo, ya si se comprende no
  41.  
  42. h = 0;
  43.  
  44. }
  45. printf("\n");
  46. printf(" H ");
  47. printf("M ");
  48. printf("S\n\n ");
  49. printf("%i %i %i\n",h,m,s);
  50.  
  51.  
  52.  
  53. }
  54.  
  55.  
  56. }
  57. }  
  58.  
  59.  
  60.  
  61.  
  62. main()
  63. {
  64.  
  65. reloj(23,59,45); // invoco a la funcion h, hora m, minuto s, segundo
  66.  
  67.  getch();
  68.  
  69. }
  70.  
  71. // Creo que ya quedo claro
  72.  


mas sobre el borrado de pantalla;

El problema con estas funciones es que al hacerlo en tiempo real (es obligatorio no se puede pausar) printf si que manda las var por pantalla, pero no se ven.


ejemplo;

Código
  1.  
  2. clrsrc();
  3.  
  4. printf("\n");
  5. printf(" H ");
  6. printf("M ");
  7. printf("S\n\n ");
  8. printf("%i %i %i\n",h,m,s);  // no se veria nada
  9.  


Título: Re: Reloj en C
Publicado por: Ari Slash en 25 Septiembre 2010, 20:17 pm
no le has asignado ningun valor a la variable i

edito: perdon por este comentario, me confundi estaba pensando en php xD


Título: Re: Reloj en C
Publicado por: Horricreu en 25 Septiembre 2010, 20:39 pm
Es que el código tiene montones de fallos que tu compilador nunca te dirá que están mal, porque el que usas es una birria.

Saludos :P


Título: Re: Reloj en C
Publicado por: sinsombra_666 en 26 Septiembre 2010, 00:23 am
Citar
no le has asignado ningun valor a la variable i

noo, el codigo en principio no se parecia nada a este, vamos con el que empeze por eso tal vez deje hay la var i que antes se utilizava en otro bucle for.


Citar
Es que el código tiene montones de fallos que tu compilador nunca te dirá que están mal, porque el que usas es una birria.

Explicate a mi no me vale que me digas que tiene montones de errores y que el copilador que lleva dev es malo, si no explicas porque ?¿?¡


Título: Re: Reloj en C
Publicado por: Horricreu en 26 Septiembre 2010, 00:42 am
A ver, por ejemplo:

  • Declaras main() en vez de int main(). En los compiladores antiguos no te dará error pero en los actuales, y buenos, sí. Recuerda que debe retornar un entero.
  • No sé porque incluyes la librería stdlib. No la necesitas.
  • Utilizas una función de la librería conio sin haber declarado dicha librería.
  • Tampoco sé porque no te da error en la función sleep().

Saludos :P


Título: Re: Reloj en C
Publicado por: [L]ord [R]NA en 26 Septiembre 2010, 00:46 am
No se pero te recomiendo que leas un tuto o un libro porque al parecer fuiste recogiendo codigo... es bien extraño que alguien añada una libreria que no va a utilizar y deje fuera otra que si necesita.


Título: Re: Reloj en C
Publicado por: Horricreu en 26 Septiembre 2010, 00:47 am
Por eso le dije que su IDE/compilador es una bazofia, porque a veces confunde funciones que son de otra librería...

Saludos :P


Título: Re: Reloj en C
Publicado por: sinsombra_666 en 26 Septiembre 2010, 01:08 am
Citar
Por eso le dije que su IDE/compilador es una bazofia, porque a veces confunde funciones que son de otra librería...

Saludos :P

Eso puede ser porque ande cargando librerias que no estavan por defecto.



Citar
No sé porque incluyes la librería stdlib. No la necesitas.

Mala costumbre, y pocas ganas de mirar las funciones de las librerias.

Citar
Declaras main() en vez de int main(). En los compiladores antiguos no te dará error pero en los actuales, y buenos, sí. Recuerda que debe retornar un entero.

Nunca pongo int main, otra contusmbre del mal programador.


Título: Re: Reloj en C
Publicado por: Horricreu en 26 Septiembre 2010, 12:57 pm
Te paso un enlace:

Código:
http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html

Saludos :P


Título: Re: Reloj en C
Publicado por: Akai en 26 Septiembre 2010, 13:30 pm
Podrías usar Code::Blocks en vez de DEv C++. Además que te ahorra poner alguna clase de sentencia para pausar el programa al final puesto que el propio IDE lo para y te muestra el tiempo empleado y el return que ha devuelto el programa.


Título: Re: Reloj en C
Publicado por: ace332 en 26 Septiembre 2010, 19:25 pm
¡Un momento señores! ;D, aclaremos un par de cosas.

Un IDE no es lo mismo que un compilador (aunque en algunos casos estos vengan integrados en un unico programa). El Dev-C++ es "malo" porque hace unos buenos años que no le dan mantenimiento.

A ver, por ejemplo:

  • Declaras main() en vez de int main(). En los compiladores antiguos no te dará error pero en los actuales, y buenos, sí. Recuerda que debe retornar un entero.
  • No sé porque incluyes la librería stdlib. No la necesitas.
  • Utilizas una función de la librería conio sin haber declarado dicha librería.
  • Tampoco sé porque no te da error en la función sleep().

El IDE (Dev-C++) no dice nada porque no fue configurado para hacerlo. Por eso es recomendable pasarle al compilador (gcc) la opcion -Wall la cual nos dara warnings cuando ocurran situaciones como las descritas en la cita.

Para activar esa opción desde el IDE seleccionamos la opción "Herramientas/Opciones del compilador" del menú. En la pestaña "Compilador", seleccionamos la casilla de verificación "Añadir los siguientes comandos al llamar al compilador" y agregamos "-Wall" en su cuadro de edición.

Saludos! :)