Foros del Web » Programación para mayores de 30 ;) » C/C++ »

No veo el error en programa

Estas en el tema de No veo el error en programa en el foro de C/C++ en Foros del Web. En este programilla sencillo para mirar si tienes anemia o no. Tengo 2 problemillas. 1-No hace el bucle d0/while cuando quiero continuar. 2-Cuanto pongo mas ...
  #1 (permalink)  
Antiguo 14/03/2015, 11:06
 
Fecha de Ingreso: febrero-2015
Mensajes: 61
Antigüedad: 9 años, 2 meses
Puntos: 0
No veo el error en programa

En este programilla sencillo para mirar si tienes anemia o no.

Tengo 2 problemillas.

1-No hace el bucle d0/while cuando quiero continuar.
2-Cuanto pongo mas de 15 años, da igual el sexo, y pongo que el nivel es mas de 15, me entra en el primer if, NO SE PORQUE, si tengo edad==1.


Algo pasa en estas dos cosas, algo muy tonto, pero no las veo, parece lo tipico que estas 1 hora sin poder compilar y te falta una comilla o un parentesis.


Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4.  
  5.  
  6. int comprobar(int edad, char sexo, float nivel){
  7.    
  8.     if(edad==1 && nivel<11 || nivel>15){
  9.         return printf("\nTiene anemia, deberia estar entre 11 y 15");
  10.     }
  11.  
  12.     else if(edad>1 && edad<=15 && nivel<11.5 || nivel>15.5){
  13.         return printf("\nTiene anemia, deberia estar entre 11.5 y 15.5");
  14.     }
  15.  
  16.     else if(sexo=='m' && edad>15 && nivel<12 || nivel>16){
  17.         return printf("\nTiene anemia, deberia estar entre 12 y 16");
  18.     }
  19.  
  20.     else if(sexo=='h' && edad>15 && nivel<14 || nivel>18){
  21.         return printf("\nTiene anemia, deberia estar entre 14 y 18");
  22.     }
  23.  
  24.     return printf("Usted no tiene anemia");
  25.    
  26. }
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38. void main(){
  39.     int edad;
  40.     char sexo, cont;
  41.     float nivel;
  42.  
  43.     do{
  44.     printf("Introduzca su edad: ");
  45.     scanf("%d", &edad);
  46.     fflush(stdin);
  47.  
  48.     printf("Introduzca su sexo, h o m: ");
  49.     scanf("%c", &sexo);
  50.     fflush(stdin);
  51.  
  52.     printf("Introduzca su nivel de hemoglobina: ");
  53.     scanf("%f", &nivel);
  54.  
  55.     comprobar(edad, sexo, nivel);
  56.  
  57.     printf("\n");
  58.     printf("\nQuieres continuar s/n?: ");
  59.     scanf("%c", &cont);
  60.     getchar();
  61.     }while(cont=!'n');
  62.  
  63.    
  64. }
  #2 (permalink)  
Antiguo 14/03/2015, 12:32
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: No veo el error en programa

Estas diciendo con if(edad==1 && nivel<11 || nivel>15) exactamente:

Si edad es igual a 1 y el nivel es mayor que 11 o.... todo lo demás importa un carajo si el nivel es mayor que 15 XDDD

Con el || quiero decir o.... Ejemplo: O pasa eso o pasa el otro. Lo mismo: O pasa eso || pasa el otro.

Entonces... Si edad==1 y nivel<11 o(||) nivel>15. Si al poner mas de 15 le va importar un pimiento que el nivel sea menor que 11 ya que va pasar que se va cumplir lo que esta después del operador ||. A menos que ambas expresiones sean verdaderas antes del ||.

No se exactamente que es lo que quieres hacer pero me parece que el programa hace lo que estas diciendo que haga, lo que falla es la lógica.

Ademas el do/while lo haría así:
Código C:
Ver original
  1. do {
  2.         printf ( "Introduzca su edad: " );
  3.         scanf ( "%d%*c", &edad );
  4.  
  5.         printf ( "Introduzca su sexo, h o m: " );
  6.         scanf ( "%c%*c", &sexo );
  7.  
  8.         printf ( "Introduzca su nivel de hemoglobina: " );
  9.         scanf ( "%f%*c", &nivel );
  10.        
  11.         comprobar ( edad, sexo, nivel );
  12.  
  13.         printf ( "\n\nQuieres continuar s/n?: " );
  14.         scanf ( "%c%*c", &cont );
  15.        
  16.         getchar();
  17.     } while ( cont != 'n' );
  #3 (permalink)  
Antiguo 14/03/2015, 20:39
lareto
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: No veo el error en programa

Hola; cuando una combinación de condiciones no se comparta como uno cree, lo más probable es que se deba a un error al interpretar el orden de precedencia. En este caso debes tener en cuenta que && tiene mayor precedencia que ||. Puedes consultar en:
http://en.cppreference.com/w/cpp/lan...tor_precedence

Por otro lado, poniendo nombres como "anemia" y "hemoglobina", yo aclararía que los datos son figurados, que no guardan ninguna relación con la "anemia" real. Nunca se sabe quién puede leer esto y creer que se trata de información real.

Etiquetas: char, int, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:13.