Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: BJM en 1 Junio 2015, 18:20 pm



Título: Duda con un while
Publicado por: BJM en 1 Junio 2015, 18:20 pm
Necesito validar que la variable tipo solo tome como valor el 1 o 2, para esto utilize un do-while
pero el ciclo se repetia una y otra vez, ahora utilizo while y pasa lo mismo, donde podria estar el error?

Código
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<conio.h>
  4. #include<string.h>
  5.  
  6. void ingresar();
  7. void calcular();
  8.  
  9. int valor=0,tiempo=0,tipo=0,metros=0;
  10. float costo=0;
  11. char nombre[10], apellido[10];
  12.  
  13. int main(){
  14.  
  15.  ingresar();
  16.  calcular();
  17.  
  18.  
  19.                     }
  20. void ingresar(){
  21.  
  22.    printf(" Empresa Maya");
  23.    printf(" \nIngrese nombre:");
  24.    scanf("%s",&nombre);
  25.    printf(" \n Ingrese Apellido:");
  26.    scanf("%s",&apellido);
  27.    printf(" \n Ingrese tiempo de cliente:");
  28.    scanf("%d",&tiempo);
  29.    printf(" \n Seleccione el tipo de maya:");
  30.  
  31.    printf(" \n 1..Maya Plana");
  32.    printf(" \n 2..Maya en Rollo");
  33.    printf(" \n opc: ");
  34.    scanf("%d",&tipo);
  35.    while(tipo!=1 || tipo!=2){
  36.     printf(" \n 1..Maya Plana");
  37.    printf(" \n 2..Maya en Rollo");
  38.    printf(" \n opc: ");
  39.    scanf("%d",&tipo);                          
  40.    }
  41.    printf(" \n Cantidad de metros:");
  42.    scanf("%d",&metros);
  43.  
  44.    }
  45.  
  46. void calcular(){
  47.     if(tiempo<6 && tipo==1){
  48.                 costo=(400*(8/100))*metros;
  49.                 }
  50.                 if(tiempo<6 && tipo==2){
  51.                 costo=(250*(8/100))*metros;
  52.                 }
  53.                  printf(" \n costo: %d",costo);
  54.                  }
  55.  


Título: Re: Duda con un while
Publicado por: engel lex en 1 Junio 2015, 18:26 pm
Código
  1. while(tipo!=1 || tipo!=2)

si tipo es diferente de 1 o tipo es diferente de 2 va a entrar al ciclo... es decir...

si tipo es 1

tipo no es diferente de 1 pero tipo es diferente de 2... entra...

recuerda la tabla de verdad de "or"

(http://html.rincondelvago.com/000264780.jpg)

entonces debería ser
Código
  1. while(tipo!=1 && tipo!=2)

porque si tipo es diferente de uno y tipo es diferente de 2, repite


Título: Re: Duda con un while
Publicado por: BJM en 1 Junio 2015, 23:33 pm
Gracias, ahora funciona bien exepto que durante la ejecucion si pasa mucho tiempo sin introducir datos el compilador se reinicia, un doble gracias si me ayudas.

Código
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<conio.h>
  4.  
  5. void ingresar();
  6. void calcular();
  7. void imprimir();
  8.  
  9. static int plana=400, rollo=250;
  10. int tiempo=0,tipo=0,metros=0;
  11.  
  12. char nombre[10], apellido[10];
  13. int des=0;
  14. int main(){
  15.  
  16.  ingresar();
  17.  calcular();
  18.  imprimir();
  19.  printf("\n\n");
  20.  system("pause");
  21.                     }
  22. void ingresar(){
  23.  
  24.    printf(" \t\t\t***EMPRESA MAYA***");
  25.    printf(" \n\nIngrese Nombre:");
  26.    scanf("%s",&nombre);
  27.    printf(" \n Ingrese Apellido:");
  28.    scanf("%s",&apellido);
  29.    printf(" \n Ingrese tiempo de cliente:");
  30.    scanf("%d",&tiempo);
  31.    printf(" \n Seleccione el tipo de maya:");
  32.  
  33.  
  34.    do{
  35.     printf(" \n 1..Maya Plana");
  36.    printf(" \n 2..Maya en Rollo");
  37.    printf(" \n opc: ");
  38.    scanf("%d",&tipo);                          
  39.    }while((tipo!=1) && (tipo!=2));
  40.  
  41.    printf(" \n Cantidad de metros:");
  42.    scanf("%d",&metros);
  43.  
  44.    }
  45.  
  46. void calcular(){
  47.  
  48.    int costo=0;
  49.  
  50.     if(tiempo==5 && tipo==1){
  51.       costo=plana*metros;
  52.       des=costo*0.08;
  53.             }
  54.         if(tiempo>=6 && tipo==1){
  55.           costo=plana*metros;
  56.           des=costo*0.06;
  57.                 }
  58.                 if(tiempo==5 && tipo==2){
  59.                    costo=rollo*metros;
  60.                    des=costo*0.08;
  61.                    }
  62.                     if(tiempo>=6 && tipo==2){
  63.                       costo=rollo*metros;
  64.                       des=costo*0.06;
  65.                      }      
  66.  
  67.  
  68.                  }
  69.  
  70. void imprimir(){
  71.  
  72.     printf(" \n\nDescuento cliente");
  73.     printf(" \n\nNombre: %s\tApellido: %s", nombre,apellido);
  74.     printf(" \n El descuento es: %d BsF",des);
  75.     }
  76.