Article View: es.comp.os.linux.programacion
Article #15844Re: fflush(stdin) se me lo pasa por el forro?
From: J.A. Gutierrez
Date: Fri, 26 May 2000 00:00
Date: Fri, 26 May 2000 00:00
75 lines
3057 bytes
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-mailReferences:
<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