c - If statement omits a condition -


i trying create program in c takes in date , returns zodiac sign.i have function supposed validate if date possible (day >0,month>0, if month ==x ,day <31 etc ) thing on part supposed validate month , determine if 30 month or 31 month accepts 1 part of conditions making either definite 30 day months or 31 day months. function name fnvalidacion()

#include <stdio.h> #include <math.h> #include <stdlib.h>  /* programa : signo zodiaco. autor    : samir fersobe 1063021 fecha    : marzo 28, 2015 */ const char *signo[12] = {"aries","tauro","geminis","cancer","leo","virgo","libra","escorpio",                         "sagitario","capricornio","acuario","piscis"};//arreglo de signos zodiacales   int ano,mes,dia   ;//variables de ano , mes y dia. int aprovacion = 0;//determina si la funcion sigue o no. int bisiesto = 1  ;//determina si el año es bisiesto. int type          ;//determina la estacion. //funciones void fnfecha()     ;//consigue la fecha void fnbisiesto()  ;//define si el año es bisiesto. void fnvalidacion();//determina si la fecha es valida. void fnsigno()     ;//determina el signo zodiacal. void fndevuelta()  ;//devuelve la respuesta. int main(int argc, char** argv) {     fnfecha();     fnbisiesto();     fnvalidacion();     fnsigno();     fndevuelta();  } void fndevuelta() {/*determinar si la funcion sigue o no, y devuelve el resultado al usuario */     switch (aprovacion){         case 1:             printf("el signo zodiacal es %s",signo[type]);             break;         default:             printf("\n intente de nuevo con otra fecha.");             break;                        } } void fnsigno() {/*determina el signo zodiacal*/     switch(mes){             case 12:                 if (dia < 22)                     type = 8;                 else                     type = 9;                 break;             case 1:                 if (dia < 20)                     type = 9;                 else                     type = 10;                 break;             case 2:                  if (dia < 18)                     type = 10;                 else                     type = 11;                 break;             case 3:                 if (dia < 20)                     type = 11;                 else                     type = 0;                 break;             case 4:                  if (dia < 20)                     type = 0;                 else                     type = 1;                 break;             case 5:                  if (dia < 21)                     type = 1;                 else                     type = 2;                 break;              case 6:                 if (dia < 21)                     type = 2;                 else                     type = 3;                 break;             case 7:                 if (dia < 23)                     type = 3;                 else                     type = 4;                 break;             case 8:                 if (dia < 28)                     type = 4;                 else                     type = 5;                 break;             case 9:                 if (dia < 23)                     type = 5;                 else                     type = 6;                 break;             case 10:                 if (dia < 23)                     type = 6;                 else                     type = 7;                 break;             case 11:                 if (dia < 22)                     type = 7;                 else                     type = 8;                 break;      } } void fnbisiesto() {/*determina si el ano es bisiesto */     if ((ano%4 != 0) || ((ano%100 == 0) && (ano%400 != 0)))         bisiesto = 0; } void fnvalidacion() {/*esta parte determina si la fecha es valida*/     if  (         (ano < 0) || (dia <0) || (mes < 1) || (mes > 12)  ||//ano,dia,mes no negativo.mes entre 1 y 12.         (dia > 31) || ((mes == 4,6,9,11) && (dia > 30))   ||//dia no mayor que 31.si mes es de 30, dia no mayor que 30.         ((bisiesto == 0) && (mes == 2) && (dia > 28))     ||//si no es bisiesto febrero no mayor que 28.         ((bisiesto == 1) && (mes == 2) && (dia > 29))       //si es bisiesto febrero no mayor que 29.         )         printf("esta fecha no es valida.");                 //explica al usuario que fecha no es valida.     else         return aprovacion = 1; } void fnfecha() {/*adquiere la fecha del usuario */     printf("inserte el ano: ");     scanf("%d", &ano);     printf("inserte el mes: ");     scanf("%d", &mes);     printf("inserte el dia: ");     scanf("%d", &dia);     return ; } 

i think, problem in

(mes == 4,6,9,11) 

you have write conditions individually, maybe like

((mes == 4) || (mes == 6) || (mes == 9) || (mes ==11)) 

otherwise, per operator precedence, code like

 ((mes == 4), 6,9,11) 

where (mes == 4) producing either 0 or 1. next, per , operator property, <#>

the left operand of comma operator evaluated void expression; there sequence point between evaluation , of right operand. right operand evaluated; result has type , value.

so, finally, expression becomes (11), true value if condition or logical operator.


[@quoted c11 standard, chapter §6.5.17].


Comments

Popular posts from this blog

javascript - AngularJS custom datepicker directive -

javascript - jQuery date picker - Disable dates after the selection from the first date picker -