Hacer mientras en C

Iniciado por neeeko, 25 Septiembre 2013, 15:54 PM

0 Miembros y 1 Visitante están viendo este tema.

neeeko

Hola gente , buen día ,estoy ejercitando para la facu  y estuve programando en Pseudocodigo hasta ahora , y no consigo hacer funcionar el do while . Alguien me podría tirar alguna ayuda ? estructura , ejemplos ? busque , pero no me funciona adjunto código
Saludos y gracias.
#include<stdio.h>
#include<conio.h>
#include<string.h>
int main()
{
    char copia[30],frase[30];
    int sigue=0;
printf("Ingrese una frase: ");
gets(frase);
printf("Desea que se realize un backUp?s=1-n=0 \n");
scanf("%d",&sigue);

do{
printf("Hola");

}while(sigue==1);


}


eferion

Es facil... cuando tu le pides un dato al usuario este presiona teclas del teclado... estas teclas se transforman en chars... concretamente para el '1' el char correspondiente es el 0x31.

En el while tu estás haciendo la comparación (sigue == 1) o, lo que es lo mismo, (0x31 == 0x01 ).

Obviamente el resultado será falso y no se repetirá el bucle.

Soluciones:

* cambiar la condición por ( sigue == '1' )
* convertir el char a int

Un saludo

neeeko

Cita de: eferion en 25 Septiembre 2013, 16:27 PM
Es facil... cuando tu le pides un dato al usuario este presiona teclas del teclado... estas teclas se transforman en chars... concretamente para el '1' el char correspondiente es el 0x31.

En el while tu estás haciendo la comparación (sigue == 1) o, lo que es lo mismo, (0x31 == 0x01 ).

Obviamente el resultado será falso y no se repetirá el bucle.

Soluciones:

* cambiar la condición por ( sigue == '1' )
* convertir el char a int

Un saludo
Nose que dato queres que cambie por int que variable .
Lo que queiro es que haga es que entre si sigue=1  sino que no haga nada.

eferion

Cita de: neeeko en 25 Septiembre 2013, 16:32 PM
Nose que dato queres que cambie por int que variable .
Lo que queiro es que haga es que entre si sigue=1  sino que no haga nada.


Vale a ver, me he liado... lo que tiene estar a mil cosas a la vez jejeje.

scanf tiene un problemilla con las lecturas si el buffer está "sucio".

para solucionarlo hay que retocar la cadena que se le pasa a scanf tal que

scanf(" %d",&sigue);

Con eso creo que debería bastar.

neeeko

Cita de: eferion en 25 Septiembre 2013, 16:45 PM
Vale a ver, me he liado... lo que tiene estar a mil cosas a la vez jejeje.

scanf tiene un problemilla con las lecturas si el buffer está "sucio".

para solucionarlo hay que retocar la cadena que se le pasa a scanf tal que

scanf(" %d",&sigue);

Con eso creo que debería bastar.
y que cambia al codigo que yo hice ? no enteindo la verdad.
mi problema es que entra 1 ves al bucle y nose poruqe

eferion

si te fijas el scanf tiene un espacio antes del %d... eso hace que el scanf ignore saltos de línea que pueda haber en el buffer de entrada.

Y te entra una vez porque sigue no vale 1, el scanf te está leyendo basura... prueba si no a hacer un printf de "sigue" a ver que valor sale.

neeeko

Cita de: eferion en 25 Septiembre 2013, 16:59 PM
si te fijas el scanf tiene un espacio antes del %d... eso hace que el scanf ignore saltos de línea que pueda haber en el buffer de entrada.

Y te entra una vez porque sigue no vale 1, el scanf te está leyendo basura... prueba si no a hacer un printf de "sigue" a ver que valor sale.
Pero no entiendo porque entra si declare :
int sigue=0

eferion

porque es un bucle do-while...

en un bucle do-while el contenido del bucle se ejecuta siempre al menos una vez. La razón es que la condición se evalúa al final de cada repetición del bucle.

Si quieres que la condición se ejecute al principio de cada iteración usa un bucle while a secas.


while(sigue==1)
{
  //...
}

neeeko

Cita de: eferion en 25 Septiembre 2013, 17:05 PM
porque es un bucle do-while...

en un bucle do-while el contenido del bucle se ejecuta siempre al menos una vez. La razón es que la condición se evalúa al final de cada repetición del bucle.

Si quieres que la condición se ejecute al principio de cada iteración usa un bucle while a secas.


while(sigue==1)
{
  //...
}



Gracias quedo claro no entendía mucho las estructuras en c. te agradezco mucho.