Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: neeeko en 25 Septiembre 2013, 15:54 pm



Título: Hacer mientras en C
Publicado por: neeeko en 25 Septiembre 2013, 15:54 pm
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.
Código:
#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);


}



Título: Re: Hacer mientras en C
Publicado por: 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


Título: Re: Hacer mientras en C
Publicado por: neeeko en 25 Septiembre 2013, 16:32 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.


Título: Re: Hacer mientras en C
Publicado por: eferion en 25 Septiembre 2013, 16:45 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

Código
  1. scanf(" %d",&sigue);

Con eso creo que debería bastar.


Título: Re: Hacer mientras en C
Publicado por: neeeko en 25 Septiembre 2013, 16:47 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

Código
  1. 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


Título: Re: Hacer mientras en C
Publicado por: 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.


Título: Re: Hacer mientras en C
Publicado por: neeeko en 25 Septiembre 2013, 17:03 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 :
Código:
int sigue=0


Título: Re: Hacer mientras en C
Publicado por: 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.

Código
  1. while(sigue==1)
  2. {
  3.  //...
  4. }


Título: Re: Hacer mientras en C
Publicado por: neeeko en 25 Septiembre 2013, 17:08 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.

Código
  1. while(sigue==1)
  2. {
  3.  //...
  4. }


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