Autor Tema: ¿Donde está el fallo? switch y get char en c  (Leído 6009 veces)

rackdon

  • Principiante
  • **
  • APR2.COM
  • Mensajes: 50
    • Ver Perfil
¿Donde está el fallo? switch y get char en c
« en: 28 de Abril 2014, 22:56 »
Buenas noches, en el siguiente código, da igual el número que meta que me sale como erroneo. Lo único que funciona es usar EOF al inicio del programa, entonces sale correctamente, en cuanto meto algún numero ya tampoco fundiona EOF.

Código: [Seleccionar]
// Ejercicio 4.19: uso de la instrucción switch //

#include <stdio.h>
main()
{
      int numprod, cantidad;
      float total = 0;
     
      printf("Por favor introduzca el n%cmero de producto y la cantidad vendida durante el d%ca (-1 en producto para terminar):\n", 163, 161);
     
      while  ( ( numprod = getchar() )!= EOF) {
            scanf("%d", &cantidad);
           
            switch (numprod) {
                   
                   case 1: total += 2.98 * cantidad;
                             break;
                   
                   case 2: total += 4.50 * cantidad;
                             break;
                   
                   case 3: total += 9.98 * cantidad;
                             break;
                   
                   case 4: total += 4.49 * cantidad;
                             break;
   
                   
                   case 5: total += 6.87 * cantidad;
                             break;
                   
                 
                   default:
                           printf("\n\nEl n%cmero de producto no es el correcto\n", 163);
                           printf("Por favor introduzca el n%cmero de producto y la cantidad vendida durante el d%ca (-1 en producto para terminar):\n", 163, 161);
                           break;
                           } // Fin switch//
         
                           } //Fin de while //
     
      printf("\n\nEl valor total de ventas es de %.2f $\n\n", total);

system("pause");
return 0;
}

He conseguido hacer el ejercicio usando este otro codigo, pero me interesaría saber hacerlo con getchar.

Código: [Seleccionar]
// Ejercicio 4.19: uso de la instrucción switch //

#include <stdio.h>
main()
{
      int numprod, cantidad;
      float total = 0;
     
      printf("Por favor introduzca el n%cmero de producto y la cantidad vendida durante el d%ca (-1 en producto para terminar):\n", 163, 161);
      scanf("%d", &numprod);
      while  (numprod != -1) {
            scanf("%d", &cantidad);
           
            switch (numprod) {
                   
                   case 1: total += 2.98 * cantidad;
                             break;
                   
                   case 2: total += 4.50 * cantidad;
                             break;
                   
                   case 3: total += 9.98 * cantidad;
                             break;
                   
                   case 4: total += 4.49 * cantidad;
                             break;
                   
                   case 5: total += 6.87 * cantidad;
                             break;
                   
                 
                   default:
                           printf("\n\nEl n%cmero de producto no es el correcto\n", 163);
                           printf("Por favor introduzca el n%cmero de producto y la cantidad vendida durante el d%ca (-1 en producto para terminar):\n", 163, 161);
                           break;
                           } // Fin switch//
            scanf("%d", &numprod);
                           } //Fin de while //
     
      printf("\n\nEl valor total de ventas es de %.2f $\n\n", total);

system("pause");
return 0;
}

                           

Gracias por todo
« Última modificación: 29 de Abril 2014, 11:33 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:¿Donde está el fallo? switch y get char
« Respuesta #1 en: 29 de Abril 2014, 09:37 »
No estoy seguro de que usar EOF sea correcto ¿por qué usas EOF?

Existen problemas con la conversión de tipos con getchar y scanf debido a que el salto de línea cuando pulsas enter queda almacenado en el buffer y se asigna a la siguiente petición de datos, esto son detalles internos de c. (Por eso en el siguiente código he introducido saltoLinea = getchar(); para absorber ese caracter \n):

Código: [Seleccionar]
// Ejercicio 4.19: uso de la instrucción switch //

#include <stdio.h>
int main() {
    int numprod='0';
    char saltoLinea;
    int cantidad=0;
    float total = 0;
    saltoLinea = '1';
    printf("Por favor introduzca el n%cmero de producto y la cantidad vendida durante el d%ca (- en producto y cantidad para terminar):\n", 163, 161);
    while ( numprod != '-') {
        printf("Por favor introduzca numero de producto:");
        numprod = getchar();
        saltoLinea = getchar();
        printf("Por favor introduzca cantidad vendida:");
        scanf("%d", &cantidad);
        saltoLinea = getchar();

        switch (numprod) {
            printf("numprod vale ahora %c", numprod);
        case '1':
            total += 2.98 * cantidad;
            break;

        case '2':
            total += 4.50 * cantidad;
            break;

        case '3':
            total += 9.98 * cantidad;
            break;

        case '4':
            total += 4.49 * cantidad;
            break;
        case '5':
            total += 6.87 * cantidad;
            break;
        case '-':
            break;
        default:
            printf("\n\nEl n%cmero de producto no es el correcto\n", 163);
            printf("Por favor introduzca el n%cmero de producto y la cantidad vendida durante el d%ca (-1 en producto para terminar):\n", 163, 161);
            break;
        } // Fin switch//
    } //Fin de while //
    printf("\n\nEl valor total de ventas es de %.2f $\n\n", total);
//system("pause");
    return 0;
}

rackdon

  • Principiante
  • **
  • APR2.COM
  • Mensajes: 50
    • Ver Perfil
Re:¿Donde está el fallo? switch y get char
« Respuesta #2 en: 29 de Abril 2014, 11:09 »
Muchas gracias, lo que no entiendo es por qué usas la coma '0' en numprod y en salto de linea '1'. ¿Qué diferencia hay de ponerlo sin coma numprod = 0 ?

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:¿Donde está el fallo? switch y get char
« Respuesta #3 en: 29 de Abril 2014, 11:33 »
Esto ha sido un despiste: int numprod='0'; debido a que estaba probando con declarar numprod como char.

La comilla simple sería de aplicación cuando trabajas con caracteres (char). Si no usas la comilla simple en realidad no estás trabajando con un carácter, otra cosa es que el compilador realice la conversión automática y te lo permita...

rackdon

  • Principiante
  • **
  • APR2.COM
  • Mensajes: 50
    • Ver Perfil
Re:¿Donde está el fallo? switch y get char en c
« Respuesta #4 en: 29 de Abril 2014, 17:43 »
Amm ok muchas gracias, esque no terminaba de entender el uso de la comilla simple, pero ya me lo has dejado todo claro.

Gracias por todo

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".