🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.os.linux.programacion
Article #15844

Re: fflush(stdin) se me lo pasa por el forro?

#15844
From: J.A. Gutierrez
Date: Fri, 26 May 2000 00:00
75 lines
3057 bytes
Santiago Romero <compiler@jet.es> wrote:

:  algo tan sencillo como un par de scanfs:

:   scanf("%d", &algo );
:   scanf("%s", algo2 );
:   y otros scanfs...
:   getchar();

:   llega un momento en que algunos scanfs se los salta, se los pasa
:   por el forro, y el getchar tambien... :(

	capisco
	lo que quieres es que en cada scanf/getchar se corresponda
	a una linea de entrada desde teclado, no?
	El problema de scanf es que si en la misma linea metes dos
	entradas y la segunda vale para el siguiente scanf, cuela.

	Ejemplo:

	int i,j;
	char s[512];
	scanf("%d",&i);
	scanf("%d",&j);
	scanf("%s",&s);
	printf("%d %d \"%s\"\n",i,j,s);

	Metiendole las lineas
	2
	3 5
	da:
	2 3 "5"

	Yo te recomendaria no usar scanf (yo como mucho lo uso para
	leer de fichero -con formato fijo-, pero nunca de entrada de usuario).

	En su lugar yo usaria fgets y luego la linea la parseas ya
	sea con sscanf o mejor a base de strtoks y atois.



:>    Depende de lo que quieras hacer, puede ayudarte la siguiente
:>    cita del Unix FAQ:

:  solo quiero vaciar el buffer de entrada.


:>    Ejemplo:
:>
:>    int i,n;
:>    if (i = ioctl (fileno(stdin), FIONREAD, &n))
:>        perror("ioctl");
:>    printf("%d\n",n);

:  īŋŊY como los extraigo? Con fgetc(stdin)?

	casi mejor con read.
	Aunque me imagino que habra problemas con lo de si el terminal
	esta en modo crudo o cocinado. Puedes meterte con mas ioctls
	para ponerlo en crudo, pero no creo que compense el esfuerzo.

:  nada, que no, se si extraigo los n supuestos caracteres, algo
:  mīŋŊs se queda en el buffer que en un programa luego se me salta
:  el getchar como si no estuviera, cuando yo quiero hacer una
:  simple pausa del tipo "Pulse enter para continuar".

	nada, lo dicho, pasate a fgets...
	Ademas el scanf para strings es inseguro y puede facilitar
	la aparicion de buffer overflows.

-- 
PGP and other useless info at      \                 Oh, show us the way
http://www.cps.unizar.es/~spd/      \             to the next whisky bar
finger://daphne.cps.unizar.es/spd    \                      Weill/Bretch
es doloroso ser sabio y descubrir la sopa de ajo                   (Pla)
Technical Details
Message-ID: <8gm944$oc4$1@news.unizar.es>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail
References: <slrn8ifed1.190.nop_linux@compiler.linux.es> <8gb9t8$7de$1@news.unizar.es> <slrn8iq5fa.mk.compiler@compiler.linux.es>

Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII
X-Google-Thread: f86c8,d38036c26efcd863
X-Google-Attributes: gidf86c8,public
From: "J.A. Gutierrez" <spd@daphne.cps.unizar.es>
Subject: Re: fflush(stdin) se me lo pasa por el forro?
Date: 2000/05/26
Message-ID: <8gm944$oc4$1@news.unizar.es>
X-Deja-AN: 627643534
Content-Transfer-Encoding: 8bit
References: <slrn8ifed1.190.nop_linux@compiler.linux.es> <8gb9t8$7de$1@news.unizar.es> <slrn8iq5fa.mk.compiler@compiler.linux.es>
Content-Type: text/plain; charset=ISO-8859-1
X-Complaints-To: usenet@news.unizar.es
X-Trace: news.unizar.es 959358916 24964 155.210.152.20 (26 May 2000 16:35:16 GMT)
Organization: Rank
Mime-Version: 1.0
User-Agent: tin/1.4.1-19991201 ("Polish") (UNIX) (IRIX/6.2 (IP22))
NNTP-Posting-Date: 26 May 2000 16:35:16 GMT
Newsgroups: es.comp.os.linux.programacion