Este código proviene de K & R. Lo he leído varias veces, pero parece que se me escapa.Explica este ejemplo C Código
#define BUFSIZE 100
char buf[BUFSIZE];
int bufp = 0;
int getch(void)
{
return(bufp>0)?buf[--bufp]:getchar();
}
int ungetch(int c)
{
if(bufp>=BUFSIZE)
printf("too many characters");
else buf[bufp++]=c;
}
El propósito de estas dos funciones, por lo que K & R dice, es evitar que un programa de la lectura de demasiada información. es decir, sin este código, una función podría no ser capaz de determinar si ha leído suficientes datos sin leer demasiado. Pero no entiendo cómo funciona.
Por ejemplo, considere getch(). Por lo que yo puedo ver que esto es los pasos que se necesitan:
- verificación si bufp es mayor que 0.
- si es así, devolver el valor del carbón buf [- bufp].
- else return getchar().
me gustaría hacer una pregunta más específica, pero literalmente no sé cómo este código logra lo que se pretende conseguir, por lo que mi pregunta es: ¿Cuál es (a) la finalidad y (b) el razonamiento de este código?
Gracias de antemano.
NOTA: Para cualquier K & ventiladores R, este código se puede encontrar en la página 79 (dependiendo de su edición, supongo)
La prueba dentro de 'ungetch' probablemente debería incluir' bufp' no 'printf' en su condición. Supongo que es un error tipográfico. –
No tengo K & R a mano ahora, pero creo que en ungetch, la condición if debería ser 'bufp> = BUFSIZE' – kol
Lo siento, probablemente sea mi error. SOmeone lo ha solucionado ahora, así que no puedo recordar lo que originalmente escribí. –