Buenas noches.
Antes decir que soy un auténtico novato en esto de la programación, pero en su momento tuve que hacer una cosillas en lenguaje C y me picó la curiosidad :p
La duda que tengo es que estaba realizando un programita para familiarizarme con los do while y los if else y me encontré con dos variantes:
Primera
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int d=4;
int v;
printf ("introduzca un numero del 1 al 10\n");
scanf("%d",&v);
do
{
printf ("El numero escogido es diferente al que estoy pensando\n");
printf ("Escoja otro\n");
scanf("%d",&v);
}
while (v!=d);
printf ("Muy bien, ese es el numero\n");
system("PAUSE");
return 0;
}
segunda
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int d=4;
int v;
printf ("introduzca un numero del 1 al 10\n");
scanf("%d",&v);
do
{
if ((v<1)||(v>10))
{
printf ("Ese numero no esta entre 1 y 10. Escribe otro numero\n");
scanf("%d",&v);
}
else
{
printf ("No ha acertado. Escriba otro numero\n");
scanf("%d",&v);
}
}
while (v!=d);
printf ("Muy bien, ese es el numero\n");
system("PAUSE");
return 0;
}
El problema es que en el primero si el primer número que pongo es el 4 no me hace un primer bucle. Sin embargo en el segundo sí me hace un primer bucle si escojo el cuatro. Y no sé por qué, pues pienso que la estructura es la misma.
Disculpen por el lío y muchas gracias ;)
altes de reponderte algo, usa las etiquetas GeSHI del foro (arriba de los emoticonos "un cuadro desplegable que dice GeSHI) escojes C y pegas allí tu codigo para que sea mas facil de leer :P
ok muchas gracias :)
Primera versión
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int d=4;
int v;
printf ("introduzca un numero del 1 al 10\n");
scanf("%d",&v);
do
{
printf ("El numero escogido es diferente al que estoy pensando\n");
printf ("Escoja otro\n");
scanf("%d",&v);
}
while (v!=d);
printf ("Muy bien, ese es el numero\n");
system("PAUSE");
return 0;
}
Segunda versión
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int d=4;
int v;
printf ("introduzca un numero del 1 al 10\n");
scanf("%d",&v);
if (v!=d)
{
do
{
if ((v<1)||(v>10))
{
printf ("Ese numero no esta entre 1 y 10. Escribe otro numero\n");
scanf("%d",&v);
}
else
{
printf ("No ha acertado. Escriba otro numero\n");
scanf("%d",&v);
}
}
while (v!=d);
}
printf ("Muy bien, ese es el numero\n");
system("PAUSE");
return 0;
}
El programa es un poco tonto pero bueno, para familiarizarme me viene bien. Consiste en adivinar un número ya fijado en el código. En el primer caso, al ponerlo bien a la primera el programa reconoce que está bien. Pare el segundo programa no te lo reconoce a la primera, sí a la segunda. La única diferencia es que en el segundo hay un if-else dentro de un do-while y en el primero sólo está el do-while.
No sé si se entiende bien :-\
CitarEl programa es un poco tonto pero bueno, para familiarizarme me viene bien. Consiste en adivinar un número ya fijado en el código. En el primer caso, al ponerlo bien a la primera el programa reconoce que está bien. Pare el segundo programa no te lo reconoce a la primera, sí a la segunda. La única diferencia es que en el segundo hay un if-else dentro de un do-while y en el primero sólo está el do-while.
creo que tus casos están al revés...
en el primero SIEMPRE va a estar "malo" a la primera
porque
do
{
printf ("El numero escogido es diferente al que estoy pensando\n");
printf ("Escoja otro\n");
scanf("%d",&v);
}
while (v!=d);
como vez el codigo, siempre va a comprobar si está bien o mal al final (donde stá ubicada la comprobacion)
en el segundo...
if (v!=d)
descarta la entrada al bucle y si está bueno, está bueno...
para arreglar el primero, en lugar de usar "do-while", podrias usar solo "while"
[code=c] while (v!=d);
{
printf ("El numero escogido es diferente al que estoy pensando\n");
printf ("Escoja otro\n");
scanf("%d",&v);
}
[/code]
en ese caso el va a comprobar la condición antes de entrar al bucle
Muchas gracias por la respuesta. Subí el código del segundo ya coregido. Así era como quería mostrarlo.
Y no aprecio diferencia con respecto al primero, dándome uno bien y el otro no.
Cita de: Danichi en 18 Enero 2014, 02:06 AM
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int d=4;
int v;
printf ("introduzca un numero del 1 al 10\n");
scanf("%d",&v);
do
{
if ((v<1)||(v>10))
{
printf ("Ese numero no esta entre 1 y 10. Escribe otro numero\n");
scanf("%d",&v);
}
else
{
printf ("No ha acertado. Escriba otro numero\n");
scanf("%d",&v);
}
}
while (v!=d);
printf ("Muy bien, ese es el numero\n");
system("PAUSE");
return 0;
}
Lo que yo entiendo entonces, es que al usar eldo-while, primero te hace el bucle y después verifica si se cumple la condición?
si, basicamente la unica diferencia entre solo "while" y "do-while" es esa... en el caso del for, evalua igual que el while
Ok. Muchísimas gracias ;)
Ya seguiré dándole caña a esto :)