AYUDA LENGUAJE C

Iniciado por LeoJ24, 7 Enero 2013, 23:58 PM

0 Miembros y 3 Visitantes están viendo este tema.

LeoJ24

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

durasno

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

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


-
CitarLA 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:
#include <stdio.h>
#include <conio.h>
int main ()
{
int num;
printf ("ESCRIBI UN NUMERO\n");
num = getche (); /* <--- ingresa el 5 */
printf ("EL NUMERO ESCRITO ES: %i\n", num); /* vas a ver que te imprime el numero 53 */
system ("PAUSE");
return 0;
}

Tabla ASCII: http://www.asciitable.com/

Cualquier duda segui preguntando. Saludos

PD: no me parece muy bueno de donde estas aprendiendo, yo lo cambiaria
Ahorrate una pregunta, lee el man

BlackZeroX

#2
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.



#include <stdio.h>
#include <conio.h>

int main ()
{
int num;
printf ("ESCRIBI UN NUMERO\n");
num = getche (); // usa mejor getchar();
printf ("EL NUMERO ESCRITO ES: %c\n", (0xff & num) );
system ("PAUSE"); // puedes usar getchar();
return 0;
}



Sin usar conio.h

#define PAUSE char __c__; while ((__c__ = getchar()) != '\n' && __c__ != EOF); puts("Pulsa la tecla ENTER para continuar."); getchar();
#include <stdio.h>

int main ()
{
   char res = 0x0;
   printf ("Escribe una letra\n");
   res = getchar();
   printf ("La letra escrita es: %c\n", res);
   PAUSE  //No usar en la macro ;
   return EXIT_SUCCESS;
}



Dulces Lunas!¡.
The Dark Shadow is my passion.

zonahurbana

Lo mismo en C++:
Código (cpp) [Seleccionar]
#include <iostream>
#include <conio.h>
using std::cout;

int main()
{
    int num;
    cout<<"Escribe un numero: ";
    num = getche();
    cout<<"\nEl nro escrito es "<<num-'0';
    return 0;
}


Ya que recién vas empezando es bueno que conozcas de su existencia  :silbar:
Nunca dejar de aprender es importante, más allá del ritmo que se siga ...

LeoJ24

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  :)

leosansan

Cita de: LeoJ24 en  7 Enero 2013, 23:58 PM

BUENASS..

Vamos, resumiendo y sin parafernalias:
Código (cpp) [Seleccionar]
#include <stdio.h>
#include <conio.h>

int main (){
int num;
printf ("ESCRIBI UN NUMERO\n");
num = getche ();
puts("\n");
printf ("EL NUMERO ESCRITO ES: %c es decir %d o sea %d\n", num,num-48,num-'0') ;
system ("PAUSE");
return 0;
}

Saluditos!.

Kherom


leosansan

Cita de: Kherom en  8 Enero 2013, 21:48 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!.

BlackZeroX

Cita de: 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  :)

En lugar de usar goto mejor usa:

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



/* longjmp example */
#include <stdio.h>
#include <stdlib.h>
#include <setjmp.h>

main()
{
  jmp_buf env;
  int val;

  val=setjmp(env);

  printf ("val is %d\n",val);

  if (!val) longjmp(env, 1);

  return 0;
}



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

Te recomiendo tirar a la basura conio.h

Dulces Lunas!¡.
The Dark Shadow is my passion.

zonahurbana

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:
Citarhttp://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:
Nunca dejar de aprender es importante, más allá del ritmo que se siga ...