Pregunta

Estoy confundido sobre el papel de getchar() en el siguiente código. Quiero decir que sé que está ayudando a ver la ventana de salida que sólo se cierra al presionar el Intro clave.

Así getchar() es, básicamente, esperando a que presione ENTRAR y luego lee un solo carácter.

¿Cuál es ese carácter único de esta función es la lectura? No insistí cualquier tecla del teclado para que pueda leer.

Ahora cuando no leer nada, ¿por qué no da un error que dice "bueno, no se ha introducido nada para mí leer"?

#include <stdio.h>

int main()
{
    printf( "blah \n" );
    getchar();
    return 0;
}
¿Fue útil?

Solución

La función getchar() simplemente esperar hasta que reciba un carácter, sosteniendo el programa hasta que lo hace.

Un carácter se envía cuando se pulse la tecla Enter; bajo un sistema operativo Windows, se enviará un retorno de carro (CR) y un avance de línea (LF).

este posterior codinghorror para una muy bien puesto explicación.

(... la explicación de la parte CR + LF, no la pieza de bloqueo getchar())

Otros consejos

Esto se debe a getchar () es un bloqueo función.

Usted debe leer sobre funciones de bloqueo , que básicamente hacen que el proceso de esperar a que algo suceda.

La implementación de este esperando comportamiento depende de la función, pero por lo general es un bucle que espera a algún evento ocurra.

En el caso de la función getchar(), esto probablemente se implementa como un bucle que lee constantemente un archivo (entrada estándar para este caso) y los cheques capear el archivo es modificado. Si se modifica el archivo, el bucle se comporta haciendo otra cosa.

Prueba esto:

#include <stdio.h>

int main(int argc, char *argv[])
{
    char ch;

    printf("I'm now going to block until you press something and then return... ");

    ch = getchar();

    if (ch >= 0)
       printf("\nYou pressed %c\n", ch);
    else
       printf("\nAliens have taken over standard input! Run!\n");

    return 0;
}

getchar() hará que su programa para ir a dormir hasta un teclado (o lo que se adjunta a la entrada estándar) de interrupción es recibida. Esto significa que está bloqueando, ningún código adicional se ejecutará hasta que se recupere getchar().

Es muy, muy útil para mirar el valor de retorno de una función con el fin de entenderlo.

Cualquier función puede bloquear, a menos que proporcione algún mecanismo para evitar el bloqueo. Por ejemplo, open() permite una bandera O_NONBLOCK que es útil para la apertura lenta para responder dispositivos como módems. En resumen, si se pone de entrada desde un terminal o tiene que esperar para recibir una respuesta del núcleo o algún dispositivo, hay una muy buena probabilidad de que podría bloquear.

se presiona la ejecución getchar () bloques de su programa hasta que una tecla. Por lo tanto, no hay error si se pulsa ninguna tecla, getchar () esperará a que ocurra:)

Usted puede aprender más acerca de cómo se comporta getchar aquí: http://www.cppreference.com/wiki/c/io/getchar ... esto debe responder a su pregunta:)

Creo que lo que confunde es que se necesita la tecla Enter se acaben el programa continúa. Por defecto, el terminal almacenará toda la información hasta que se pulsa Intro, incluso antes de enviarlo al programa C.

de Enter problema aquí

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top