Duda con un while

Iniciado por BJM, 1 Junio 2015, 18:20 PM

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

BJM

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?

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>

void ingresar();
void calcular();

int valor=0,tiempo=0,tipo=0,metros=0;
float costo=0;
char nombre[10], apellido[10];

int main(){
   
  ingresar();
  calcular();

 
                     }
void ingresar(){
 
    printf(" Empresa Maya");
    printf(" \nIngrese nombre:");
    scanf("%s",&nombre);
    printf(" \n Ingrese Apellido:");
    scanf("%s",&apellido);
    printf(" \n Ingrese tiempo de cliente:");
    scanf("%d",&tiempo);
    printf(" \n Seleccione el tipo de maya:");
   
    printf(" \n 1..Maya Plana");
    printf(" \n 2..Maya en Rollo");
    printf(" \n opc: ");
    scanf("%d",&tipo);
    while(tipo!=1 || tipo!=2){
     printf(" \n 1..Maya Plana");
    printf(" \n 2..Maya en Rollo");
    printf(" \n opc: ");
    scanf("%d",&tipo);                           
    }
    printf(" \n Cantidad de metros:");
    scanf("%d",&metros);

    }
   
void calcular(){
     if(tiempo<6 && tipo==1){
                 costo=(400*(8/100))*metros;
                 }
                 if(tiempo<6 && tipo==2){
                 costo=(250*(8/100))*metros;
                 }
                  printf(" \n costo: %d",costo);
                  }
     

engel lex

Código (cpp) [Seleccionar]
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"



entonces debería ser
Código (cpp) [Seleccionar]
while(tipo!=1 && tipo!=2)

porque si tipo es diferente de uno y tipo es diferente de 2, repite
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

BJM

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.

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>

void ingresar();
void calcular();
void imprimir();

static int plana=400, rollo=250;
int tiempo=0,tipo=0,metros=0;

char nombre[10], apellido[10];
int des=0;
int main(){
   
  ingresar();
  calcular();
  imprimir();
  printf("\n\n");
  system("pause");
                     }
void ingresar(){
 
    printf(" \t\t\t***EMPRESA MAYA***");
    printf(" \n\nIngrese Nombre:");
    scanf("%s",&nombre);
    printf(" \n Ingrese Apellido:");
    scanf("%s",&apellido);
    printf(" \n Ingrese tiempo de cliente:");
    scanf("%d",&tiempo);
    printf(" \n Seleccione el tipo de maya:");
   
   
    do{
     printf(" \n 1..Maya Plana");
    printf(" \n 2..Maya en Rollo");
    printf(" \n opc: ");
    scanf("%d",&tipo);                           
    }while((tipo!=1) && (tipo!=2));
   
    printf(" \n Cantidad de metros:");
    scanf("%d",&metros);
   
    }
   
void calcular(){
   
    int costo=0;
   
     if(tiempo==5 && tipo==1){
       costo=plana*metros;
       des=costo*0.08;
             }
         if(tiempo>=6 && tipo==1){
           costo=plana*metros;
           des=costo*0.06;
                 }
                 if(tiempo==5 && tipo==2){
                    costo=rollo*metros;
                    des=costo*0.08;
                    }
                     if(tiempo>=6 && tipo==2){
                       costo=rollo*metros;
                       des=costo*0.06;
                      }       
                 
           
                  }
     
void imprimir(){
     
     printf(" \n\nDescuento cliente");
     printf(" \n\nNombre: %s\tApellido: %s", nombre,apellido);
     printf(" \n El descuento es: %d BsF",des);
     }