Sábado 14 de Diciembre de 2024, 14:42
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Problema con bucle.
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Problema con bucle. (Leído 2543 veces)
Aprendiz21Sam
Miembro activo
Mensajes: 32
Problema con bucle.
«
en:
Martes 19 de Enero de 2010, 17:38 »
0
Hola, tengo un problema con este bucle que no me funciona.
Este es el programa. Entro en el bucle y me pregunta el número. Se lo doy y me da el símbolo, hasta ahí todo bien. Entonces me pregunta que si quiero pulse S para salir, pero no me da la opción de pulsar nada, sino que se salta el scanf ("%c", &Salir); y vuelve a entrar en el bucle. También he probado el while y no funciona, es decir, he probado a poner el valor de salir directamente en 'S' y sigue entrando. ¿Alguna explicación? Gracias de antemano.
Código: C
/*Bibliotecas de C*/
#include <stdio.h>
#include <conio.h>
/*Cabecera de las funciones*/
/*Programa pincipal*/
int
main
(
)
{
/*Variables del programa principal*/
int
Letra
;
char
A
;
char
Salir
;
/*Valor de las variables*/
/*Petición de datos*/
while
(
Salir
!=
's'
or Salir
!=
'S'
)
{
printf
(
"nEscriba un numero para determinar su simbolo: "
)
;
scanf
(
"%d"
,
&
Letra
)
;
A
=
Letra
;
printf
(
"n%d = %c"
,
Letra
,
A
)
;
printf
(
"nPulse 'S' para salir u otra tecla para poner otro numero: "
)
;
scanf
(
"%c"
,
&
Salir
)
;
}
/*Algoritmo principal*/
/*Salida de datos*/
/*Otros*/
getch
(
)
;
return
0
;
}
Tweet
Eternal Idol
Moderador
Mensajes: 4696
Nacionalidad:
Re: Problema con bucle.
«
Respuesta #1 en:
Martes 19 de Enero de 2010, 17:47 »
0
Cualquier caracter sera diferente de S o (or, o || en C/C++) diferente de s. Lo que queres es que el bucle se ejecute mientras Salir no sea NINGUNO de los dos, es decir que sea diferente de S Y diferente de s.
Código: Text
while (Salir != 's' && Salir != 'S')
Nacional y Popular
En mi país la bandera de Eva es inmortal.
Queremos una Argentina socialmente justa, económicamente libre y políticamente soberana.
¡Perón cumple, Evita dignifica!
La mano invisible del mercado me robo la billetera.
Aprendiz21Sam
Miembro activo
Mensajes: 32
Re: Problema con bucle.
«
Respuesta #2 en:
Martes 19 de Enero de 2010, 17:54 »
0
Sigo teniendo un problemilla. El while ahora si funciona, pero el bucle en si no, porque no me deja escribir el valor de "Salir.
Código: C
while
(
Salir
!=
's'
&&
Salir
!=
'S'
)
{
printf
(
"nEscriba un numero para determinar su simbolo: "
)
;
scanf
(
"%d"
,
&
Letra
)
;
A
=
Letra
;
printf
(
"n%d = %c"
,
Letra
,
A
)
;
printf
(
"nPulse 'S' para salir u otra tecla para poner otro numero: "
)
;
scanf
(
"%c"
,
&
Salir
)
;
}
El último scanf no se ejecuta nunca.
Gracias de antemano.
Eternal Idol
Moderador
Mensajes: 4696
Nacionalidad:
Re: Problema con bucle.
«
Respuesta #3 en:
Martes 19 de Enero de 2010, 18:18 »
0
scanf es veneno, reemplazarlo por fgets + sscanf suele solucionar todos los problemas.
Código: C
/*Bibliotecas de C*/
#include <stdio.h>
/*Cabecera de las funciones*/
/*Programa pincipal*/
int
main
(
)
{
/*Variables del programa principal*/
int
Letra
;
char
A
;
char
Salir
=
'n'
;
char
cad
[
80
]
;
/*Valor de las variables*/
/*Petición de datos*/
while
(
Salir
!=
's'
&&
Salir
!=
'S'
)
{
printf
(
"nEscriba un numero para determinar su simbolo: "
)
;
fgets
(
cad
,
sizeof
(
cad
)
,
stdin
)
;
sscanf
(
cad
,
"%d"
,
&
Letra
)
;
A
=
Letra
;
printf
(
"n%d = %c"
,
Letra
,
A
)
;
printf
(
"nPulse 'S' para salir u otra tecla para poner otro numero: "
)
;
fgets
(
cad
,
sizeof
(
cad
)
,
stdin
)
;
sscanf
(
cad
,
"%c"
,
&
Salir
)
;
}
/*Algoritmo principal*/
/*Salida de datos*/
/*Otros*/
getchar
(
)
;
return
0
;
}
Nacional y Popular
En mi país la bandera de Eva es inmortal.
Queremos una Argentina socialmente justa, económicamente libre y políticamente soberana.
¡Perón cumple, Evita dignifica!
La mano invisible del mercado me robo la billetera.
Aprendiz21Sam
Miembro activo
Mensajes: 32
Re: Problema con bucle.
«
Respuesta #4 en:
Martes 19 de Enero de 2010, 18:25 »
0
Vaya gracias. Ahora si funciona pero tengo algunas dudas.
Veras yo utilizo muy pocos recursos para hacer programas con los que debería usar otros recursos. Por ejemplo, para un número aleatorio no utilizo las funciones de rand, etc. Lo que sí me gustaría saber es por qué no funcionaba mi "scanf ("%c", Salir);".
Gracias de antemano.
Eternal Idol
Moderador
Mensajes: 4696
Nacionalidad:
Re: Problema con bucle.
«
Respuesta #5 en:
Martes 19 de Enero de 2010, 18:43 »
0
De nada, a diferencia de fgets, scanf deja caracteres sin retirar del buffer de entrada de teclado como por ejemplo el salto de linea, entonces cuando volves a leer simplemente retorna ese salto de linea (se suele decir que ensucia el buffer).
Nacional y Popular
En mi país la bandera de Eva es inmortal.
Queremos una Argentina socialmente justa, económicamente libre y políticamente soberana.
¡Perón cumple, Evita dignifica!
La mano invisible del mercado me robo la billetera.
Aprendiz21Sam
Miembro activo
Mensajes: 32
Re: Problema con bucle.
«
Respuesta #6 en:
Martes 19 de Enero de 2010, 18:57 »
0
Gracias por la explicación. Entonces si no me equivoco, aunque sea un poco enrevesado, podría escribirlo de este modo...
Código: C
while
(
Salir
!=
's'
&&
Salir
!=
'S'
)
{
printf
(
"nEscriba un numero para determinar su simbolo: "
)
;
scanf
(
"%d"
,
&
Letra
)
;
A
=
Letra
;
printf
(
"n%d = %c"
,
Letra
,
A
)
;
printf
(
"nPulse 'S' para salir u otra tecla para poner otro numero: "
)
;
fflush
(
stdin
)
;
scanf
(
"%c"
,
&
Salir
)
;
}
Una pregunta mas ya que eres moderador. ¿Si tengo mas dudas sigo con este hilo o creo otro nuevo?
Eternal Idol
Moderador
Mensajes: 4696
Nacionalidad:
Re: Problema con bucle.
«
Respuesta #7 en:
Martes 19 de Enero de 2010, 21:43 »
0
No, eso esta mal, no es standard, la forma correcta de hacerlo es la que te dije ... y ademas no tiene sentido usar una funcion que ensucia el buffer y limpiarlo.
Nacional y Popular
En mi país la bandera de Eva es inmortal.
Queremos una Argentina socialmente justa, económicamente libre y políticamente soberana.
¡Perón cumple, Evita dignifica!
La mano invisible del mercado me robo la billetera.
Aprendiz21Sam
Miembro activo
Mensajes: 32
Re: Problema con bucle.
«
Respuesta #8 en:
Martes 19 de Enero de 2010, 21:46 »
0
De acuerdo gracias por las explicaciones. En la otra pregunta que he hecho de otro programa que estoy realizando, modificare los "scanf" por lo que me dijiste.
Duda sobre "scanf" y bucle resuelta.
Gracias.
Eternal Idol
Moderador
Mensajes: 4696
Nacionalidad:
Re: Problema con bucle.
«
Respuesta #9 en:
Martes 19 de Enero de 2010, 22:04 »
0
De nadas
Nacional y Popular
En mi país la bandera de Eva es inmortal.
Queremos una Argentina socialmente justa, económicamente libre y políticamente soberana.
¡Perón cumple, Evita dignifica!
La mano invisible del mercado me robo la billetera.
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Problema con bucle.