Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Como volver a una sentencia anterior en c#

Iniciado por Totemalf, 06 de Junio de 2012, 09:27:32 PM

« anterior - próximo »

Totemalf

Buenas,
estoy liado con mi aprendizaje de C#, más novato que yo no se puede ser porque está estipulado como delito grave en el código penal.
El caso es que tengo una duda con un código, a ver si se puede hacer lo que quiero. El código es este:


        {
            //Pregunto su nombre
            Console.WriteLine("Hola, ¿Cómo te llamas?");

            // Pongo las letritas de color rojo para que se vea diferente lo que ella escribe y guardo en la vriable nombre lo que me diga, que va a ser Lidia a no ser que se equivoque al escribir
            Console.ForegroundColor = ConsoleColor.Red;
            string nombre = Console.ReadLine();
           
            //vuelvo a poner las letritas de gris
              Console.ForegroundColor = ConsoleColor.Gray;

            //si su nombre es lidia, la saludo cortesmente y sino me gustaría volver a preguntar el nombre...
           
            if (nombre == "Lidia")
            {
                Console.WriteLine("Bonito nombre, muñeca");
            }
            else
            {
                Console.WriteLine("Ese no puede ser tu nombre, me estás engañando \n" + "Dime tu verdadero nombre");
            }
            Console.ReadLine();

Pues nada, este es el caso... si se da el else ¿podría volver a la sentencia donde se pregunta el nombre?
Un saludo, y como siempre, Muchas gracias.
Asensio.

Vicente

Necesitas poner tu codigo dentro de un bucle (por ejemplo un while), que compruebe si has dicho la respuesta correcta o no.

http://msdn.microsoft.com/en-us/library/2aeyhxcd(v=vs.100).aspx

Totemalf

Mmm, ya veo.
acabo de ver que precisamente el próximo tuto del curso que estoy siguiendo va sobre el ciclo while. Gracias Vicente!

En otro orden de cosas, cuando pido algún dato al usuario, por ejemplo el nombre, y luego quiero saludarle. Ejemplo:
Antonio
Hola Antonio

El Hola Antonio sale al instante, y me gustaría que tardase sobre un segundo en aparecer, como si el ordenador necesitase tiempo para decirlo, imagino que tiene que haber alguna instrucción para esperar, en wintermute habia algo tipo Sleep();

eglomer

Pues se trata de escribir la cadena "Hola " y meterle alguna función de espera, y luego seguir imprimiendo el nombre.

No he manejado wintermute y no sé si tendrá algún tipo de Sleep(), pero por si acaso te dejo las funciones que suelo usar yo para estos casos (en C++) por si te pueden ayudar, aunque sea como guía:

#include <time.h>

/*----------------------------------------------------------------------------------------------------*/
void sleep (unsigned int seconds){
/*----------------------------------------------------------------------------------------------------*/
clock_t endwait;
endwait = clock () + seconds * CLOCKS_PER_SEC ;
while (clock() < endwait) {}
}


/*----------------------------------------------------------------------------------------------------*/
void wait (unsigned int miliseconds){
/*----------------------------------------------------------------------------------------------------*/
clock_t goal = miliseconds + clock();
while (goal > clock());
}


Saludos. ^^


Totemalf

Sois unos cracks, muchas gracias... cuando haga el mierdiprogramilla lo cuelgo para que lo veais.

Un saludo!

bnl

En C# ademas del while tienes el do/while que creo que se adapta mas a lo que necesitas, es similar pero el conjunto de instucciones que contiene se ejecuta 1 o mas veces mientras que con el while podria no ejecutarse ninguna. Aunque el while tambien te serviria si inicializas la variable del nombre a un valor distinto de Lidia

http://msdn.microsoft.com/es-es/library/370s1zax(v=vs.80).aspx

Tambien te podria valer un goto, pero soy partidario de cortar las manos y ponerles una orden de alejamiento a quienes lo usan

http://msdn.microsoft.com/es-es/library/b34dt9cd(v=vs.80).aspx
Mi web: http://www.brausoft.com/
No sabían que era imposible, así que lo hicieron.

Totemalf

#7
Jejeje, muchas gracias. Al final he conseguido hacer lo que quería. El do While aún no lo he tocado, pero lo miraré a ver que tal. De momento os cuelgo el código con lo que quería hacer, que ahora si que me funciona. Muchas gracias por vuestra ayuda.
 
    static void Main(string[] args)
       {

          // pregunto el nombre y pongo las letras de color rojo para que se diferencien de lo que dice "la maquina"

           Console.WriteLine("Hola, ¿Cómo te llamas?");
           Console.ForegroundColor = ConsoleColor.Red;
           string nombre = Console.ReadLine();


// si el nombre es diferente de lidia y de Lidia, se inician las sentencias del While, sino se las salta dando lugar directamente al saludo de "la maquina"
       
   while (nombre != "Lidia" && nombre != "lidia")
           {  
               //vuelvo a poner las letritas de gris
               Console.ForegroundColor = ConsoleColor.Gray;
               Thread.Sleep(350);
               Console.WriteLine("Ese no puede ser tu nombre");
               Thread.Sleep(700);
               Console.WriteLine("Dime tu verdadero nombre");
               Console.ForegroundColor = ConsoleColor.Red;
               nombre = Console.ReadLine();
           }
           Console.ForegroundColor = ConsoleColor.Gray;
           Console.WriteLine("encantado de conocerte, Lidia");
           Console.ReadLine();
       }
   }
}

p.d. me olvidaba, para que funcione el Sleep he tenido que añadir el espacio de nombres System.Threading;

Vicente

Para comparar cadenas, acostumbrate a utilizar Equals, en particular esta sobrecarga:

http://msdn.microsoft.com/en-us/library/c64xh8f9.aspx

Te permite decidir si quieres que se tenga en cuenta el caso y la cultura en las comparaciones, lo cual es muy util.

TrOnTxU

Cita de: Vicente en 07 de Junio de 2012, 08:40:59 PM
Para comparar cadenas, acostumbrate a utilizar Equals, en particular esta sobrecarga:

http://msdn.microsoft.com/en-us/library/c64xh8f9.aspx

Te permite decidir si quieres que se tenga en cuenta el caso y la cultura en las comparaciones, lo cual es muy util.

Vaya! gracias, muy util!

La de conversiones que me podria haber ahorrado  :-[
Vicent: Linked-In  ***  ¡¡Ya tengo blog!!






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.