• Lunes 16 de Diciembre de 2024, 08:47

Autor Tema:  porque me hace un bucle infinito???  (Leído 950 veces)

oscarmgg

  • Nuevo Miembro
  • *
  • Mensajes: 14
    • Ver Perfil
porque me hace un bucle infinito???
« en: Viernes 14 de Noviembre de 2008, 20:45 »
0
Citar
Hola amigos un cordial saludos,bien es que tengo un programilla que hice pero que al intentar modificarlo con el objetivo de hacer un do while para que ma pregunte repetidamente el menu de opciones,y no se porque me hace un bucle infinito tanto con or(||) o and(&&),si alguien puede ayudarme le agradeceria muchisimo es cuestion no de tarea solo de practica que estoy realizando con el objetivo de aprender cada vez algo nuevo ...mil gracias
el codigo fuente es el siguiente,destacando que sin el do while me funciona perfecto ,quiero decir que me hace correcto las operaciones pero al colocar el do while como les indico con el objetivo de que cada vez que me haga una operacion el menu de opciones vuela a visualizarse hasta que el usuario decida escoger la opcion E.SALIR
Código: Text
  1.  
  2. #include "stdio.h"
  3.  
  4.  float numero_suma(float numero_a, float numero_b)
  5.  {
  6.    float suma;
  7.    suma= numero_a + numero_b;        
  8.              
  9. return suma;
  10. };
  11.  
  12. float numero_resta(float numero_a,float numero_b)
  13. {
  14.  float resta;
  15.  if(numero_a > numero_b){                  
  16.     resta=numero_a - numero_b;
  17. }
  18.  if(numero_a < numero_b){
  19.     resta= numero_b - numero_a;  
  20. }
  21. return resta;
  22. };
  23.  
  24. numero_producto(float numero_a,float numero_b)
  25. {
  26.  float producto;
  27.  producto= numero_a * numero_b;                    
  28. return producto;
  29. };
  30.  
  31. numero_division( float numero_a,float numero_b)
  32. {
  33. float division;
  34. if(numero_b!=0)
  35. {
  36. division= numero_a/numero_b;
  37. }
  38. else
  39. {
  40. printf("no puedes dividir por cero");
  41. printf("n");
  42. system("pause");
  43. exit(2);
  44. }
  45. return division;
  46.  
  47. };
  48.  
  49.  
  50. main()
  51. {                    /*del main*/
  52. char op;
  53. float a;
  54. float b;
  55. float numsuma;
  56. float numresta;
  57. float numproducto;
  58. float numdivision;
  59. do
  60. {
  61.    printf("ntA.- Suma");
  62.    printf("ntB.- Resta");
  63.    printf("ntC.- Producto");
  64.    printf("ntD.- division");
  65.    printf("ntE.- salir");
  66.    printf("n");
  67.    printf("selecciona una opcion: ");
  68.    scanf("%d", &op);
  69.    printf("n");
  70.  
  71.  
  72.  
  73.  
  74.  
  75. switch (op)
  76. {
  77.   case 'A':{
  78.        printf("digite el primer numero");
  79.  scanf("%f",&a);
  80.  printf("n");
  81.  
  82.  printf("digite el segundo numero");
  83.  scanf("%f",&b);
  84.  printf("n");
  85.    printf("Suma: ");
  86.    numsuma =numero_suma(a,b);
  87.    printf("la suma es %.2fn",numsuma);
  88.   }break;
  89.  
  90.   case 'B':{
  91.        printf("digite el primer numero");
  92.        scanf("%f",&a);
  93.        printf("n");
  94.  
  95.       printf("digite el segundo numero");
  96.       scanf("%f",&b);
  97.       printf("n");
  98.       printf("Resta: ");
  99.       numresta = numero_resta(a,b);
  100.       printf("la resta es %.2fn",numresta);
  101.       }break;
  102.  
  103.   case 'C':{
  104.        printf("digite el primer numero");
  105.        scanf("%f",&a);
  106.        printf("n");
  107.  
  108.       printf("digite el segundo numero");
  109.       scanf("%f",&b);
  110.       printf("n");
  111.       printf("Producto: ");
  112.       numproducto = numero_producto(a,b);
  113.       printf("el producto es %.2fn",numproducto);
  114.       }break;
  115.    
  116.    case 'D':{
  117.        printf("digite el primer numero");
  118.        scanf("%f",&a);
  119.        printf("n");
  120.  
  121.        printf("digite el segundo numero");
  122.        scanf("%f",&b);
  123.        printf("n");
  124.        printf("Division: ");
  125.        numdivision = numero_division(a,b);
  126.        printf("la division es %.2fn",numdivision);
  127.       }break;
  128.    
  129.    case 'E': {
  130.      printf("ha elegido salir del programa...Adios...");
  131.      printf("n");
  132.      system("pause");
  133.      exit(0);
  134.      }break;
  135.     default:{
  136.      printf("opcion incorrecta");
  137.      printf("n");
  138.     }break;
  139.  
  140. }                   /* del switch*/
  141.  
  142. }while(op!='A' || op!='B' || op!='C' || op!='D' || op!='E');
  143. // LO HE INTENTADO ASI TAMBIEN Y ME HACE LO MISMO BUCLE INFINITO.
  144. //while(op!='A' && op!='B' && op!='C' && op!='D' && op!='E'); que a mi apreciacion no podria ser puesto
  145. //que no hay una opcion que cumpla con todo
  146. //while(op!='E');
  147.  
  148.  
  149.  
  150.  
  151. system("pause");
  152.  
  153. }  /* del main*/
  154.  
  155.  
  156.  
  157.  






polux

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: porque me hace un bucle infinito???
« Respuesta #1 en: Sábado 15 de Noviembre de 2008, 01:20 »
0
Ya que con el "scanf" estas recogiendo un caracter y no un numero deberias hacer:

scanf("%c", &op);

y no "%d" que solo es para numeros.