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
Post a Comment