dev comando c getchar

comando - getchar(); c



Confundido acerca de la funciĆ³n getchar() (5)

Eso es porque getchar () es una función de bloqueo .

Debería leer sobre las funciones de bloqueo , que básicamente hacen que el proceso espere a que suceda algo.

La implementación de este comportamiento de espera depende de la función, pero generalmente es un bucle que espera que ocurra algún evento.

Para el caso de la función getchar() , esto probablemente se implementa como un bucle que lee constantemente un archivo (stdin para este caso) y verifica si el archivo está modificado. Si se modifica el archivo, el bucle se comporta al hacer otra cosa.

Estoy confundido acerca del getchar() de getchar() en el siguiente código. Quiero decir, sé que me está ayudando a ver la ventana de resultados que solo se cerrará cuando presione la tecla Intro .

Entonces, getchar() básicamente está esperando que yo presione enter y luego lea un solo carácter.

¿Qué es ese único carácter que esta función está leyendo? No presioné ninguna tecla del teclado para que lo leyera.

Ahora, cuando no está leyendo nada, ¿por qué no da un error que diga "hey, no ingresaste nada para que yo lea"?

#include <stdio.h> int main() { printf( "blah /n" ); getchar(); return 0; }


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

Se envía un carácter cuando presionas la tecla enter; bajo un sistema operativo Windows, enviará un retorno de carro (CR) y un salto de línea (LF).

Ver esta publicación de CodingHorror para una explicación bien puesta.

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


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 se ponga en suspensión hasta que se reciba una interrupción del teclado (o lo que sea que esté adjunto a la entrada estándar). Esto significa que está bloqueando, no se ejecutará ningún código adicional hasta que getchar() .

Es muy, muy útil observar el valor de retorno de una función para entenderla.

Cualquier función puede bloquear, a menos que proporcione algún mecanismo para evitar el bloqueo. Por ejemplo, open() permite un indicador O_NONBLOCK que es útil para abrir dispositivos de respuesta lenta como módems. En resumen, si recibe información de un terminal o tiene que esperar para obtener una respuesta del kernel o de algún dispositivo, es muy probable que se bloquee.



getchar () bloquea la ejecución de su programa hasta que se presiona una tecla. Entonces, no hay error si no se presiona ninguna tecla, getchar () esperará a que suceda :)