[C] Problema con ejercicio

Iniciado por dmacias, 24 Febrero 2014, 16:38 PM

0 Miembros y 1 Visitante están viendo este tema.

dmacias

Gracias a los dos por tomaros la molestia , mirare con lupa ese codigo que me pone leosansan haber las diferencias con el mio y os voy robando tecnica con la vista ¬¬

Nos volveremos a ver con mas problemas  :xD

Un saludo


Gh057

buenísimo dmacias, como otra indicación te dejo link a la wiki sobre la rutina switch-case:

  -> http://es.wikipedia.org/wiki/Switch_case

en donde te dará un panorama más amplio de la correcta implementación de la sentencia break, el mismo se utiliza para evitar la ejecucción sucesiva de las siguientes opciones; por lo cual y por convención al dejar la opción "default" al final, puedes evitar la misma.

eso puede llevarte a buscar un listado de las funciones de la biblioteca ansi c para repasar su sintaxis, diferentes modos de empleo y si es posible, parámetros de entrada o si devuelven valores al ejecutarse. saludos!
4 d0nd3 1r4 3l gh057? l4 r3d 3s 74n v4s74 3 1nf1n1t4...

dmacias

Me pongo a ello, buscare unos cuantos ejercicios mas usando switch para ganar soltura  ;-)  ;-)

leosansan

Cita de: dmacias en 26 Febrero 2014, 12:05 PM
Me pongo a ello, buscare unos cuantos ejercicios mas usando switch para ganar soltura  ;-)  ;-)

Y al mismo tiempo ejecuta el código anterior e introduce una letra en lugar de un número y ¡¡¡OHHHhhhh....!!!!, sorpresa, el  programa se mete en un bucle.

Eso se debe a no haber validado o comprobado que lo que se introduce es un número entero o cualquier otra cosa.

Aquí estaremos para lo que necesites  ;).


¡¡¡¡ Saluditos! ..... !!!!



rir3760

Cita de: xaps en 25 Febrero 2014, 18:29 PMNo creo que sea buena idea incitar a la gente que está empezando a programar a usar bucles sin condición de los que se saldrá mediante breaks, no es una buena práctica.

Yo te animo a que intentes hacer un bucle con condición y te olvides del break.
Mas que una mala practica es una cuestión de estilos.

Una opción es utilizar un bucle con una salida al medio con la ventaja del mínimo de expresiones:
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
   int num;
   int rv;
   int ch;
   
   while (1){
      printf("Introduce un numero (1 .. 9): ");
      fflush(stdout);
      if ((rv = scanf("%d", &num)) == EOF)
         return EXIT_FAILURE;
      else
         while ((ch = getchar()) != EOF && ch != '\n')
            ;
     
      if (rv == 1 && num >= 1 && num <= 9)
         break;
     
      puts("Entrada no valida");
   }
   
   printf("Numero: %d\n", num);
   
   return EXIT_SUCCESS;
}


Otra es un bucle "while ..." o "do ... while" con expresiones repetidas:
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
   int num;
   int rv;
   int ch;
   int ok;
   
   do {
      printf("Introduce un numero (1 .. 9): ");
      fflush(stdout);
      if ((rv = scanf("%d", &num)) == EOF)
         return EXIT_FAILURE;
      else
         while ((ch = getchar()) != EOF && ch != '\n')
            ;
     
      ok = rv == 1 && num >= 1 && num <= 9;
      if (!ok)
         puts("Entrada no valida");
   }while (!ok);
   
   printf("Numero: %d\n", num);
   
   return EXIT_SUCCESS;
}


Una tercera es colocar toda la operación (en este caso lectura) en una función, mas o menos así:
while ((rv = fn(...)) == 0){
   /* Entrada no valida o fuera de rango */
}
if (rv == EOF){
   /* Error critico */
}

/* ... (OK) */


----

Cita de: leosansan en 25 Febrero 2014, 19:47 PMP.D: Juraito, juraito que el código está bien indentado, pero no sé que pasa últimamente que al ponerlo en las Code se "desparrama".
Eso se debe a que en tu editor de texto estas indentando el código fuente con tabuladores en vez de espacios.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

dmacias

Vaya, no entiendo ni la mitad de las cosas de esos codigos  :o supongo que conforme vaya avanzando en mis estudios ire viendo todas esas opciones.

De todos modos gracias por poner esas alternativas