Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: LeoJ24 en 7 Enero 2013, 23:58 pm



Título: AYUDA LENGUAJE C
Publicado por: LeoJ24 en 7 Enero 2013, 23:58 pm
BUENASS..
ESTOY ADENTRANDOME EN ESTO DEL HACKER Y DECIDI EMPEZAR POR BATCH Y LENGUAJE C.
BATCH YA LO APRENDI Y AHORA ESTOY INTENTANDO APRENDER LENGUAJE C PERO ME QUEDE ESTANCADO EN LA FUNCION GETCH Y GETCHE. QUIERO USAR GETCHE PARA QUE CUANDO INTRODUZCA UN NUMERO EN EL PROGRAMA YA COMPILADO APAREZCA EL NUMERO EN EL SIGUIENTE REGLON SIN NECESIDAD DE APRETAR NADA MAS QUE EL NUMERO. LO QUE YO PONGO EN EL COMPILADOR ES:

#include <stdio.h>
int main ()
{
int num;
printf ("ESCRIBI UN NUMERO\n");
scanf ("%i", &num);
num = getche ();
printf ("EL NUMERO ESCRITO ES: %i\n", num);
system ("PAUSE");
return 0;
}

DESPUES LO COMPILO Y LO EJECUTO, PERO AL EJECUTAR INGRESO EL NUMERO Y NO PASA NADA. APRETO ENTER, Y EL PUNTERO SE UBICA EN EL REGLON DE ABAJO DANDOME COMO UNICA OPCION TECLEAR ALGO.
CUANDO ESCRIBO EL SEGUNDO NUMERO, APARECE LA ORACION "EL NUMERO ESCRITO ES: xx" PERO EL NUMERO NO ES IGUAL A NINGUNO DE LOS ANTERIORES.
EN RESUMEN, LA FUNCION GETCHE FUNCIONA, PERO NO ES IGUAL A NINGUNO DE LOS DOS NUMEROS QUE INTRUDUJE.
ALGUIEN SABE A QUE SE DEBE???
SALUDOS


Título: Re: AYUDA LENGUAJE C
Publicado por: durasno en 8 Enero 2013, 06:02 am
Hola! la verdad no entendi bien que es lo que queres; algunas aclaraciones:

- las funciones getch y getche no son estandar por lo tanto no se recomienda usarlo si recien empezas(para eso tenes getchar()), ademas estas funciones son para el ingreso de caracteres, no para enteros.

- para imprimir dos valores necesitas dos variables

-
Citar
LO QUE YO PONGO EN EL COMPILADOR ES:
lo pones en un archivo fuente, no en el compilador


-
Citar
LA FUNCION GETCHE FUNCIONA, PERO NO ES IGUAL A NINGUNO DE LOS DOS NUMEROS QUE INTRUDUJE. ALGUIEN SABE A QUE SE DEBE???
como te decia antes getche es para caracteres. Si vos ingresas algo a travez de getche() lo que se almacena en la variable num, es el ASCII de una letra. PAra que se entienda ejecuta:
Código
  1. #include <stdio.h>
  2. #include <conio.h>
  3. int main ()
  4. {
  5. int num;
  6. printf ("ESCRIBI UN NUMERO\n");
  7. num = getche (); /* <--- ingresa el 5 */
  8. printf ("EL NUMERO ESCRITO ES: %i\n", num); /* vas a ver que te imprime el numero 53 */
  9. system ("PAUSE");
  10. return 0;
  11. }
Tabla ASCII: http://www.asciitable.com/

Cualquier duda segui preguntando. Saludos

PD: no me parece muy bueno de donde estas aprendiendo, yo lo cambiaria


Título: Re: AYUDA LENGUAJE C
Publicado por: BlackZeroX en 8 Enero 2013, 07:54 am
Opinión personal: No importa de donde aprendas o como aprendas, lo importante es que entiendas el lenguaje, te recomiendo esta pagina: http://www.cplusplus.com/reference/ Esta en ingles pero no hay tanta necesidad de leer (mas que en algunas ocasiones) ya que las personas aprendemos mas al principio viendo (ejecuta los códigos de ejemplo que te brindan), cuando más o menos agarres la onda lee como estructurar un programa, consejos, que no hacer que si hacer, etc.

Algo mas ligero y en español: http://c.conclase.net/curso/ aun que hay códigos que te brindan que están mal (cuando vayas a la estructura avl la función "balance" necesita unos ajustes ya que no funciona bien en algunos casos, aun así esta buena para aprender.)

En lugar %i usa %c.
Al querer imprimir un carácter almacenado en una variable de tipo int debes hacer (recomendable) usar una mascara (0xff) para que solo tome el valor 1 byte (el mas insignificante) en lugar de todos los demás.

Todo lo que esta dentro de la biblioteca conio.h NO SON ESTÁNDARES (no es portable entre plataformas Sistemas Operativos) pero claro que las puedes usar, de hecho todo lo que esta en esta biblioteca las puedes reemplazar.

Código
  1.  
  2. #include <stdio.h>
  3. #include <conio.h>
  4.  
  5. int main ()
  6. {
  7. int num;
  8. printf ("ESCRIBI UN NUMERO\n");
  9. num = getche (); // usa mejor getchar();
  10. printf ("EL NUMERO ESCRITO ES: %c\n", (0xff & num) );
  11. system ("PAUSE"); // puedes usar getchar();
  12. return 0;
  13. }
  14.  
  15.  

Sin usar conio.h
Código
  1. #define PAUSE char __c__; while ((__c__ = getchar()) != '\n' && __c__ != EOF); puts("Pulsa la tecla ENTER para continuar."); getchar();
  2. #include <stdio.h>
  3.  
  4. int main ()
  5. {
  6.    char res = 0x0;
  7.    printf ("Escribe una letra\n");
  8.    res = getchar();
  9.    printf ("La letra escrita es: %c\n", res);
  10.    PAUSE  //No usar en la macro ;
  11.    return EXIT_SUCCESS;
  12. }
  13.  
  14.  

Dulces Lunas!¡.


Título: Re: AYUDA LENGUAJE C
Publicado por: zonahurbana en 8 Enero 2013, 19:33 pm
Lo mismo en C++:
Código
  1. #include <iostream>
  2. #include <conio.h>
  3. using std::cout;
  4.  
  5. int main()
  6. {
  7.    int num;
  8.    cout<<"Escribe un numero: ";
  9.    num = getche();
  10.    cout<<"\nEl nro escrito es "<<num-'0';
  11.    return 0;
  12. }

Ya que recién vas empezando es bueno que conozcas de su existencia  :silbar:


Título: Re: AYUDA LENGUAJE C
Publicado por: LeoJ24 en 8 Enero 2013, 20:18 pm
GRACIAS A TODOS POR LAS RESPUESTAS, YA ENTENDI ESTO DEL GETCH Y GETCHE GRACIAS A USTEDES.. MI PROXIMO PASO SON LAS SENTENCIAS DE CONDICION Y E SALTO (if, switch, goto, break).
SALU2  :)


Título: Re: AYUDA LENGUAJE C
Publicado por: leosansan en 8 Enero 2013, 20:57 pm

BUENASS..

Vamos, resumiendo y sin parafernalias:
Código
  1. #include <stdio.h>
  2. #include <conio.h>
  3.  
  4. int main (){
  5. int num;
  6. printf ("ESCRIBI UN NUMERO\n");
  7. num = getche ();
  8. puts("\n");
  9. printf ("EL NUMERO ESCRITO ES: %c es decir %d o sea %d\n", num,num-48,num-'0') ;
  10. system ("PAUSE");
  11. return 0;
  12. }
  13.  
Saluditos!.


Título: Re: AYUDA LENGUAJE C
Publicado por: Kherom en 8 Enero 2013, 21:48 pm
No grites, por favor.


Título: Re: AYUDA LENGUAJE C
Publicado por: leosansan en 8 Enero 2013, 22:16 pm
No grites, por favor.
Creo que se refiere a ti LeoJ24, por el hecho de que escribir en mayúsculas se entiende equivale a gritar.
¿O me equivoco?.
Saluditos!.


Título: Re: AYUDA LENGUAJE C
Publicado por: BlackZeroX en 9 Enero 2013, 00:19 am
GRACIAS A TODOS POR LAS RESPUESTAS, YA ENTENDI ESTO DEL GETCH Y GETCHE GRACIAS A USTEDES.. MI PROXIMO PASO SON LAS SENTENCIAS DE CONDICION Y E SALTO (if, switch, goto, break).
SALU2  :)

En lugar de usar goto mejor usa:

Biblioteca: setjmp.h
jmp_buf;
setjmp();
longjmp():

Código
  1.  
  2. /* longjmp example */
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <setjmp.h>
  6.  
  7. main()
  8. {
  9.  jmp_buf env;
  10.  int val;
  11.  
  12.  val=setjmp(env);
  13.  
  14.  printf ("val is %d\n",val);
  15.  
  16.  if (!val) longjmp(env, 1);
  17.  
  18.  return 0;
  19. }
  20.  
  21.  

Más info: http://www.cplusplus.com/reference/csetjmp/longjmp/

Te recomiendo tirar a la basura conio.h

Dulces Lunas!¡.


Título: Re: AYUDA LENGUAJE C
Publicado por: zonahurbana en 9 Enero 2013, 02:11 am
Tengo entendido que no existe problema que no pueda resolverse sin usar goto (se puede prescindir de él en el 99% de los casos), que con los bucles basta, o que existen otros métodos más eficientes:
Citar
http://arco.esi.uclm.es/~david.villa/pensar_en_C++/pensar_en_cpp-vol1.pdf
Pág 73

Sin embargo, esperemos más respuestas; quizás alguna nos ilustra con ejemplos jeje  :rolleyes:


Título: Re: AYUDA LENGUAJE C
Publicado por: Kherom en 9 Enero 2013, 02:19 am
Creo que se refiere a ti LeoJ24, por el hecho de que escribir en mayúsculas se entiende equivale a gritar.
¿O me equivoco?.
Saluditos!.


Estás en lo cierto.

Tengo entendido que no existe problema que no pueda resolverse sin usar goto (se puede prescindir de él en el 99% de los casos), que con los bucles basta, o que existen otros métodos más eficientes:
Sin embargo, esperemos más respuestas; quizás alguna nos ilustra con ejemplos jeje  :rolleyes:

goto es una instrucción perfectamente válida y eficiente, pero no se recomienda utilizarla  porque hace más difícil seguir el código. No obstante en algunos casos es la mejor solución.