Buscar temas sin respuesta | Ver temas activos |

Nuevo tema Responder al tema Índice general » Programación: lo ultimo » .NET
Autor Mensaje
Desconectado 
 Asunto: Problema con doble validación en "do while"
NotaPublicado: 11 Dic 2012 17:57 
poster a 9600 bps

Registrado: 23 Sep 2010 14:37
Mensajes: 71
Ubicación: Argentina- Santa Fé - Arequito
Hola amigos.
Estoy tratando de aprender matrices, como verán el programa no está terminado porque
No he aprendido aún a guardar datos en un archivo, pero este no es el asunto.-
El caso es que debo validar 2 cosas en el mismo “do while” una está correcta que se ingrese
un número y no cualquier cosa y la otra es que el ingreso no sea menor a cero ni mayor a diez.-
while(!byte.TryParse(Console.ReadLine(), out calificar[temp]))
En esta línea de código ¿se puede insertar algo como un AND?

Código:
using System;
using System.Collections.Generic;

public class myMatris
{
   public static void Main()
   {
      myMatris objmyMatris;
      objmyMatris = new myMatris();
      objmyMatris.Entorno();
      objmyMatris.Ingreso();

   }   

   void Entorno()
   {
      Console.Title = " Calificación de exámenes";
      Console.BackgroundColor = ConsoleColor.Blue;
      Console.ForegroundColor = ConsoleColor.Yellow;
      Console.SetWindowSize(80,50);
      Console.Clear();
   }   

   void Ingreso()
   {   
      byte elementos = 0;
      
      Console.SetCursorPosition(02,02);
      Console.Write("Ingrese el número de alumnos(máximo 255).....:");
      while(!byte.TryParse(Console.ReadLine(), out elementos))
      {
         Console.SetCursorPosition(02,06);
         Console.Write("Ingreso incorrecto, intentelo nuevamente...");
         Console.SetCursorPosition(48,02);
         Console.Write("                                                       ");
         Console.SetCursorPosition(48,02);
      }      
      Console.SetCursorPosition(02,06);
      Console.Write("                                                                                                    ");
      
      byte[] calificar = new byte[elementos];
      byte temp = 0, tTop = 4, tTopT = 6;
      do
      {
         Console.SetCursorPosition(02,tTop);
         Console.Write("Ingrese calificación del alumno nº:" + temp + " (0-10)..:");
         while(!byte.TryParse(Console.ReadLine(), out calificar[temp]))
         {
            Console.SetCursorPosition(02,tTopT);
            Console.Write("Ingreso incorrecto, intentelo nuevamente...");
            Console.SetCursorPosition(48,tTop);
            Console.Write("                                                       ");
            Console.SetCursorPosition(48,tTop);
         }      
         Console.SetCursorPosition(02,tTopT);
         Console.Write("                                                                                                    ");
         temp++;
         tTop += 2;    
         tTopT += 2;
      }while(temp < elementos);
   
      tTop += 3;    
      Console.SetCursorPosition(02,tTop);
      Console.Write("Apriete una tecla para cerrar la aplicación...");
      Console.ReadKey();
   }
}


Bueno ustedes me dirán.-
Saludos.
Daniel


Arriba
 Perfil  
 
Desconectado 
 Asunto: Re: Problema con doble validación en "do while"
NotaPublicado: 11 Dic 2012 23:47 
PC++ Monopolizer
Avatar de Usuario

Registrado: 31 Dic 1969 21:00
Mensajes: 13432
Mira, algo que tenes que tener siempre en cuenta es que tu codigo sea legible

Esta linea

while(!byte.TryParse(Console.ReadLine(), out calificar[temp]))

es una chanchada

lo mejor a veces es separarlo paso por paso o mejor aun meterlo en un metodo

while(EsNumeroValido(out numero))
{
}

private bool EsNumeroValido(out byte numero)
{
string numeroDelInput = Console.ReadLine();
return byte.TryParse(numeroDelInput, out numero);
}

Si necesitas poner mas logica lo haces dentro de ese metodo

Que el codigo tenga mas lineas no es importante lo importante es que sea legible como una prosa

_________________
"In hell, computers run Linux" - Sam & Max dixit.

And God said......... "Run, it's Kratos."

"Bugs are job security"
Código:

stop
(); // Hammertime!
 


Arriba
 Perfil  
 
Desconectado 
 Asunto: Re: Problema con doble validación en "do while"
NotaPublicado: 12 Dic 2012 03:52 
poster a 512 kbps
Avatar de Usuario

Registrado: 06 Ago 2011 21:16
Mensajes: 627
Puedes hacer algo como (al final del do while):
Si cumple la condición A
____si cumple la condición B
_______C = 1 (al inicio del do while vuelve a ser 0)

el do while se haría mientras C sea 1. Si no quieres que termine el do while debes hacer poner lo que quieras que haga, donde está C, no puedo ayudarte mucho porque entiendo muy poco del lenguaje que usas (yo podría decirse que sólo sé basic de DOS).

_________________
Hojas, ramitas, etc, desparramadas es menos mugriento que apiladas, o quemadas o quemándose. Y menos cansador además.


Arriba
 Perfil  
 
Desconectado 
 Asunto: Re: Problema con doble validación en "do while"
NotaPublicado: 19 Dic 2012 20:24 
poster a 9600 bps

Registrado: 23 Sep 2010 14:37
Mensajes: 71
Ubicación: Argentina- Santa Fé - Arequito
Hola amigos.
Citar:
Esta linea

while(!byte.TryParse(Console.ReadLine(), out calificar[temp]))

es una chanchada

En cuanto a esta linea de código me pareció maravillosa.-
Por favor no dejes de explicarme el error que puede causar o x que es una chanchada.-
De este post la aprendí y me pareció correcta.-
viewtopic.php?f=88&t=35512

Con un if pude hacer que funcione correctamente, sólo que ahora de me deja
ingresar un cero como calificación.-

Un fuerte abrazo.-
Daniel


Arriba
 Perfil  
 
Desconectado 
 Asunto: Re: Problema con doble validación en "do while"
NotaPublicado: 19 Dic 2012 22:11 
PC++ Monopolizer
Avatar de Usuario

Registrado: 31 Dic 1969 21:00
Mensajes: 13432
Que funcione es una cosa, que sea desprolija es otra. Yo digo que es una chanchada porque es completamente desprolija e inentendible.

El codigo debe ser simple de leer, tene en cuenta que .NET te transforma todo a codigo IL y hace sus optimizaciones internas no necesitas ese tipo de cosas nefastas para lograr hacerlo todo en 1 linea

_________________
"In hell, computers run Linux" - Sam & Max dixit.

And God said......... "Run, it's Kratos."

"Bugs are job security"
Código:

stop
(); // Hammertime!
 


Arriba
 Perfil  
 
Desconectado 
 Asunto: Re: Problema con doble validación en "do while"
NotaPublicado: 20 Dic 2012 15:33 
poster a 9600 bps

Registrado: 03 May 2004 23:37
Mensajes: 95
Ubicación: Buenos Aires
DanielC escribió:
Hola amigos.
Citar:
Esta linea

while(!byte.TryParse(Console.ReadLine(), out calificar[temp]))

es una chanchada

En cuanto a esta linea de código me pareció maravillosa.-
Por favor no dejes de explicarme el error que puede causar o x que es una chanchada.-
De este post la aprendí y me pareció correcta.-
http://www.pcmasmas.com/viewtopic.php?f=88&t=35512

Con un if pude hacer que funcione correctamente, sólo que ahora de me deja
ingresar un cero como calificación.-

Un fuerte abrazo.-
Daniel


Yo muchas veces cometo el mismo error. En el momento no pasa nada, funciona y vas para adelante, pero si en un mes tenes que agarrar ese mismo codigo, no entendes nada.


Arriba
 Perfil  
 
Desconectado 
 Asunto: Re: Problema con doble validación en "do while"
NotaPublicado: 23 Dic 2012 19:10 
poster a 9600 bps

Registrado: 23 Sep 2010 14:37
Mensajes: 71
Ubicación: Argentina- Santa Fé - Arequito
Hola a todos.-
De acuerdo, les dejo a continuación mi código para que me digan cómo puedo hacer para que al ingresar por ejemplo a25,12.5,25m no se cierre el programa.-

Código:
using System;
using System.Collections.Generic;

public class Entero
{
   public static void Main()
   {
      Entero objentero;
      objentero = new Entero();
      byte numero = 0;
      while(objentero.EsNumeroValido(out numero))
      {
         if(numero > 10)
         {
            Console.SetCursorPosition(02,06);
            Console.Write("La puntuación no puede súperar los 10 puntos, intentelo nuevamente....");
         }
         else{break;}
      }
      Console.SetCursorPosition(02,06);
      Console.Write("                                                                                                      ");
      Console.SetCursorPosition(02,06);
      Console.Write("Apriete una tecla para cerrar la aplicación...");
      Console.ReadKey();
   }
   
   private bool EsNumeroValido(out byte numero)
   {
      Console.SetCursorPosition(02,02);
      Console.Write("                                                       ");
      Console.SetCursorPosition(02,02);
      Console.Write("Ingrese un entero(máximo 10)...:");
      string numeroDelInput = Console.ReadLine();
      return byte.TryParse(numeroDelInput, out numero);
   }
}


Espero la ayuda de Uds. Porque hace unos días que lo intento y no lo logro.-

Saludos.
Daniel


Arriba
 Perfil  
 
Mostrar mensajes previos:  Ordenar por  
Nuevo tema Responder al tema  [ 7 mensajes ] 


  Imprimir vista Tema previo | Siguiente tema 

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado


Todos los horarios son UTC - 3 horas


No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro
No puede enviar adjuntos en este Foro

Buscar:
Saltar a:  
PC++ Style
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traducción al español por Huan Manwë