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.
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
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();
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. ^^
En C# puedes usar la funcion Thread.Sleep para esto.
http://msdn.microsoft.com/en-us/library/d00bd51t.aspx
Sois unos cracks, muchas gracias... cuando haga el mierdiprogramilla lo cuelgo para que lo veais.
Un saludo!
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
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;
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.
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 :-[