Test Foro de elhacker.net SMF 2.1

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?

#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);
                  }
     
Título: Re: Duda con un while
Publicado por: engel lex en 1 Junio 2015, 18:26 PM
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"

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

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
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.

#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);
     }