C/Visual C - Ayuda con enter en el buffer

   
Vista:

Ayuda con enter en el buffer

Publicado por Diego (86 intervenciones) el 18/04/2014 20:33:02
Buenas tardes, tengo un ejercicio que no logro realizar correctamante, dice así:

Escriba un programa que copie caracteres del teclado en la pantalla remplazando cada
ocurrencia de barra invertida por \\, cada tabulación por \t, cada enter por \n. Emplee getchar().

# Por ejemplo. Si ingresa:
hola mundo
chau mundo\
# Debe imprimir:
hola\tmundo\nchau mundo\\

Este es código que realizé:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <stdio.h>
int main()
{
	int enter, barra_inv, tab, n, t;
	barra_inv = 92;
	enter = 0x0A;
	tab = 9;
	n = 110;
	t = 116;
	int carac_act;
	while ((carac_act = getchar()) != EOF)
	{
		if (carac_act == barra_inv)
		{
			putchar(barra_inv);
			putchar(barra_inv);
		}
		else
		{
			if (carac_act == tab)
			{
				putchar(barra_inv);
				putchar(t);
			}
			else
			{
				if (carac_act == enter)
				{
					putchar(barra_inv);
					putchar(n);
				}
				else
				{
					putchar(carac_act);
				}
			}
		}
 
	}
	return 0;
 
}

No logro hacer que cuando se ingrese ENTER no se libere el buffer y siga ingresando caracteres hasta que llegue el EOF; Basicamente lo que quiero es que cuando se presiose enter siga leyendo y no imprima todo hasta que llegue el EOF, para que quede como la carga del ejemplo.

Quizás no me expresé bien, de ser así trataré de reformularlo.

Les agradezco su tiempo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Ayuda con enter en el buffer

Publicado por Tom (481 intervenciones) el 21/04/2014 12:50:29
getchar() es lo mismo que getc(stdin).

stdin es un File *, un "stream", y los streams en unix tienen un buffer asociado. Ese buffer se "libera" como tú dices cuando se lee del teclado un "return".

Echa un ojo al grupo de llamadas setbuf(); Con esas rutinas puedes cambiar el comportamiento del buffer del stream.

Pero, si estás haciendo esto el Linux/Unix aún podrías tener otro problema, y es que puede ser que el terminal (el tty) también tenga su propio buffer. En ese caso se te complica un poco, debes usar llamadas del termios (echa un ojo al man).
Además, no estás suprimiendo la salida del carácter tecleado. Si consiguieras anular el buffer, tu salida sería algo así como:
hhoollaa \tmmuunnddoo
\n
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar