🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: chile.comp.programacion
Article #1788

Re: Ayuda con programa en C

#1788
From: Andres E. Hernando
Date: Tue, 16 May 2006 14:30
58 lines
2969 bytes
El 13 May 2006 23:48:32 -0700, FARU grito: 
> Hola amigos, estoy practicando en C, y tengo una duda, estoy usando un
> while y para salir se hace con 0, pero si preciona cualquier letra en
> vez de un numero queda en un loop ?me ayudan?

Hola,

	De partida, tu programa podria usar una mejor indentacion,
pero eso es a gusto del consumidor...

> 
> ?Por que ocurre eso?, estoy intentando de resolverlo pero no entiendo
> por que.

	Tu problema es con la conversion de un caracter (digamos 'a')
a un entero en el scanf... No me acuerdo como resuelve eso scanf, pero
claramente esa es la fuente del problema: probablemente escanee la 
linea, revise si es un numero o no y luego devuelve la parte de la
linea que no usa al buffer, de ese modo el siguiente scanf vuelve a 
encontrar una 'a' y tu programa cae en un loop infinito. Pero aqui
me estoy carrileando, hace rato que no me meto con estos temas de C.
Alguien mas puede tener la respuesta correcta...

	Lo que yo haria, de partida seria trabajar con caracteres en
lugar de enteros, de ese modo una 'a' es completamente aceptable en
el scanf. 

	A partir de ahi tienes que decidir si transformas el caracter 
a un valor numerico para que tus comparaciones sigan siendo validas o
si haces tus comparaciones en terminos de caracter (recuerda que
'1' != 1).

	Tambien, el scanf cuando lee caracteres lo hace de a 1 y no 
bota el '\n' que viene al final, como consecuencia, tienes que 
deshacerte del cambio de linea manualmente (metodo preferido, usando
un getchar() al final).

	En definitiva, estos son los cambios que yo haria:

	int i; ==> char i = 'x'; /* acostumbrate a inicializar tus */
				 /* variables!!!                   */

	scanf("%i", &i); ==> 

		scanf("%c", &i); /* Ahora una letra es aceptable */
		getchar();	 /* Elimina el 'enter' al final  */
		i = i - '0'; 	 /* Ahora las comparaciones son  */
				 /* validas, ('1' - '0') == 1    */ 


	Saludos,
	AHG.

-- 
An atheist is a man with no invisible means of support.

http://www.diferenciados.blogspot.com/ 	 msn:a_hernand.com
BotBait: http://tinyurl.com/oz55e 		 [62]
Technical Details
Message-ID: <4cu60kF16r56gU1@individual.net>
Path: arc1-ca.pugleaf.net!g2news2.google.com!news3.google.com!border1.nntp.dca.giganews.com!nntp.giganews.com!newsfeed00.sul.t-online.de!newsfeed01.sul.t-online.de!t-online.de!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail
References: <1147589312.808179.69320@j33g2000cwa.googlegroups.com>

Show Full Headers
Complete Article Headers
X-Google-Thread: 1593cb,ca8f03851255089e
X-Google-Attributes: gid1593cb,public
X-Google-Language: SPANISH,ASCII-7-bit
Path: arc1-ca.pugleaf.net!g2news2.google.com!news3.google.com!border1.nntp.dca.giganews.com!nntp.giganews.com!newsfeed00.sul.t-online.de!newsfeed01.sul.t-online.de!t-online.de!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail
From: "Andres E. Hernando" <NOherSPnandoAM@fas.harvard.edu>
Newsgroups: chile.comp.programacion
Subject: Re: Ayuda con programa en C
Date: 16 May 2006 14:30:44 GMT
Lines: 58
Message-ID: <4cu60kF16r56gU1@individual.net>
References: <1147589312.808179.69320@j33g2000cwa.googlegroups.com>
X-Trace: individual.net xQyBxIR38ONtrxEFJuPJ1gk6H7EHPCeGO4cl3PjVCVflyFPaBA
X-Orig-Path: not-for-mail
User-Agent: tin/1.8.2-20060425 ("Shillay") (UNIX) (CYGWIN_NT-5.1/1.5.19(0.150/4/2) (i686))