Manual de Programación en C: Introducir datos. scanf() getch() y getchar()


Aquí estamos de nuevo en esta serie de manuales de programación en C. Se que en la última entrega dije que esta sería sobre sentencias, algo muy importante, pero que tendrá que esperar, ya que creo que esto es por lo menos interesante y te permitirá hacer programas un poco más complejos por tu cuenta con lo que ya sabes.

En este capítulo aprenderemos cómo meter valores por el teclado y hacer que estos se guarden en variables. Nos permitirá hacer programas cuya ejecución cambie según un valor que le metamos. Si recuerdas el programa que hicimos que calculaba el radio de una circunferencia, para cambiar el radio tenía que modificar el código del programa. Aquí evitaremos eso.

Usaremos dos funciones que dependerán de si estás en Windows o en Linux; una es scanf(), común a ambos sistemas, que permite leer números, y otra getch() (Windows) y getchar() (Linux) que permite leer caracteres.

scanf
Empecemos con scanf, se utiliza de manera similar a printf, con la diferencia de que no permite imprimir nada en pantalla, veamos un código en el que declaramos una variable int y le metemos un valor con scanf.

#include
int main()
{
    int variable;
    printf("Introduce un número: ");
    scanf("%i", &variable);
    printf("\nHas introducido el número: %i\n", variable);
    return 0;
}

Vemos algo nuevo y es el & que hay delante de la variable en scanf. Este símbolo lo que hace es indicar que nos referimos a la dirección de memoria de la variable y no a su valor. Recuerda que cuando explicamos las variables, dije que al declarar una lo que hacemos es decirle al sistema que nos reserve un hueco en la memoria, de modo que si tenemos una variable lo que tenemos es un byte o un conjunto de bytes con el nombre de la variable en el que podemos guardar datos. Scanf lo que pide no es la variable es la dirección de memoria en la que hay que guardar los datos. Esta dirección podríamos decir que es aleatoria, la da el sistema en el momento de declarar la variable y depende de muchas cosas.

Si no pusiéramos el &, intentaría guardar el número que introduzcamos en la dirección de la memoria que sea el valor de la variable, por ejemplo:

int variable = 5;
scanf("%i", variable);

Intentaría introducir lo que metamos por teclado en la dirección 5 de memoria, esto puede ocasionar problemas, podría sobreescribir una dirección en la que está cargado algo que necesita el sistema operativo para funcionar y el ordenador podría bloquearse.

Si ejecutamos el código de arriba obetenemos.

Introduce un número: _

Si ponemos un número y pulsamos enter tendremos:

Introduce un número: 13
Has introducido el número: 13

getch (SOLO WINDOWS)

Yo uso Linux, así que quizá alguno de los códigos esté mal, ya que no los pruebo (en realidad prueba sólo algunos).

getch nos permite guardar una letra en una variable, tiene otra función llamada getche, que hace lo mismo solo que esta última muestra la letra en pantalla mientras que la otra no lo hace, la e del final es de “echo” o eco.

Veamos un ejemplo:

#include
int main()
{
    char letra;
    printf("Introduce una letra: ");
    letra = getch();
    printf("\nHas introducido la letra: %c\n", letra);
    return 0;
}

Vemos que aquí debemos igualar la variable char a la función, ya que la función da como salida la letra. Si ejecutamos obtenemos.

Introduce una letra: a
Has introducido la letra: a

getchar() (Linux)

El uso es el mismo que con getch(), solo que en Linux, el ejemplo es el mismo. (copy&paste):

#include
int main()
{
    char letra;
    printf("Introduce una letra: ");
    letra = getchar();
    printf("\nHas introducido la letra: %c\n", letra);
    return 0;
}

Si ejecutamos obtenemos.

Introduce una letra: a
Has introducido la letra: a

Hasta aquí este capítulo, empiezo a trabajar ya en la próxima entrega sobre sentencias. Ha sido un capítulo muy corto pero que creo que abre bastantes posibilidades para empezar a probar más cosas.
Licencia de Creative Commons
Manual de C by The Neowriter is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.

Anuncios
Esta entrada fue publicada en Manual de programación en C, Manuales, Manuales largos y etiquetada , , , , , , . Guarda el enlace permanente.

11 respuestas a Manual de Programación en C: Introducir datos. scanf() getch() y getchar()

  1. Pingback: Los números de 2010 « White-Hat H4ck1n9

  2. /*Funcion que Emula GETCH() de la libreria BorlandC. Utiliza la libreria windows.h*/
    int getch(void)
    {
    int car;
    DWORD leidos, modo;

    GetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), &modo);
    SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), modo & !ENABLE_ECHO_INPUT & !ENABLE_PROCESSED_INPUT);
    ReadConsole(GetStdHandle(STD_INPUT_HANDLE), &car, 1, &leidos, NULL);
    SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), modo);
    return car;
    }

  3. Itzel dijo:

    no me ayudaron en lo que queria saber pero pues aun asi
    gracias
    saludos!!

  4. Hola amigos, tengo un problema a la hora de ejecutar este programita:

    ————–CALCULADORA—————:

    #include
    #include
    #include
    void datos(float*,float*);
    float suma(float,float);
    float resta(float,float);
    float multiplicacion(float,float);
    float raiz(float);
    int main(){
    int opcion;
    float numero1,numero2;
    do{
    printf(“\t|======================= MENU ============================|”);
    printf(“\n\t|========================
    =================================|”);
    printf(“\n\t|1.-Opcion para sumar dos numeros\t\t\t |”);
    printf(“\n\t|2.-Opcion para restar dos numeros\t\t\t |”);
    printf(“\n\t|3.-Opcion para multiplicar dos numeros\t\t\t |”);
    printf(“\n\t|4.-Opcion para calcular la raiz cuadrada de un numeros |”);
    printf(“\n\t|5.-Salida del programa\t\t\t\t\t |”);
    printf(“\n\t|=========================
    ================================|”);
    printf(“\n\tElija una opcion: “);
    scanf(“%d”,&opcion);
    switch(opcion){
    case 1:datos(&numero1,&numero2);
    printf(“\tLa suma es: %.2f\n”,suma(numero1,numero2));
    break;
    case 2:datos(&numero1,&numero2);
    printf(“\tLa resta es: %.2f\n”,resta(numero1,numero2));
    break;
    case 3:datos(&numero1,&numero2);
    printf(“\tLa multiplicacion es: %.2f\n”,
    multiplicacion(numero1,numero2));
    break;
    case 4:printf(“\tIngrese un numero: “);
    scanf(“%f”,&numero1);
    printf(“\tLa raiz cuadrada es: %.2f\n”,sqrt(numero1));
    break;
    }
    system(“pause”);
    system(“cls”);
    }while(opcion!=5);
    return 0;}
    void datos(float *n1,float *n2){
    printf(“\tIngrese el primer numero: “);
    scanf(“%f”,n1);
    printf(“\tIngrese el segundo numero: “);
    scanf(“%f”,n2);}
    float suma(float n1,float n2){
    return n1+n2;}
    float resta(float n1,float n2){
    return n1-n2;}
    float multiplicacion(float n1,float n2){
    return n1*n2;}

    ———————————————-:

    Bueno después de compilarlo en geany (Linux) a la hora de ejecutarlo me aparece el siguiente error en la terminal:

    sh: 1: cls: not found

    creo.. que de pronto sea un error de mi ubuntu porque en eclipse tampoco funka..
    ayuda porfavor

  5. sarahi dijo:

    no se supone que se ingresa el numero de letras
    (soy principiante )

  6. myejemplo dijo:

    Hola,
    Quiza sea una tonteria, o lo este haciendo mal, pero no se como resolver esto:

    //
    do {
    printf(“Introduzca un valor: \n”);
    scanf(“%d”, &valor);
    }
    while ( valor 100);
    printf(“valor correcto”);
    //

    ¿como lo “protejo” para el caso de que alguien meta un char?

    // ejemplo esperado:
    $ 5
    > valor correcto

    // ejemplo inesperado:
    $ a
    > Introduzca un valor:
    > Introduzca un valor:

    > Introduzca un valor:

    Gracias de antemano

  7. Donal dijo:

    ¿Como seria para solo esperar un numero del teclado?

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s