olá, sou um novato em c e aprendo tudo pela net - tutoriais, foruns, ...
estou a fazer um exercício que é o seguinte:
Fazer um programa em que entrem: a data de nascimento e a data actual. O programa deve calcular o número de dias vividos pela pessoa.
Uso o lcc 4.0
A fonte .c:
ao compilar:
57 statement has no effect
alguns missing prototypes da função comumoubissexto
ajudem-me por favor e desculpem postar um código tão extenso
estou a fazer um exercício que é o seguinte:
Fazer um programa em que entrem: a data de nascimento e a data actual. O programa deve calcular o número de dias vividos pela pessoa.
Uso o lcc 4.0
A fonte .c:
Código:
#include <stdio.h> /*Comandos printf e scanf*/
int meses[13]={31,28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; /*Meses do ano comum*/
int ano_bissexto=0; /*Variável booleana*/
int nasc_ano, nasc_mes, nasc_dia; /*Vartáveis com a data de nascimento*/
int hoje_ano, hoje_mes, hoje_dia; /*Variáveis com a data currente*/
unsigned int total_c; /*Variável final da função total_ano_currente*/
unsigned long int total_total; /*Variável final da função resto_anos*/
int total_primeiro; /*Variável final da função primeiro_ano*/
/*Função booleana que testa se o ano é comum ou bissexto*/
int comumoubissexto (x) /*Recebe argumento x*/
{
ano_bissexto = (((x%4)==0) && ((x%100)!=0) || ((x%400)==0)); /*Bissexto se divisível por 4 ou por 400 e não por 100!*/
return (ano_bissexto); /*Retorna 1 ou 0*/
}
/*Função que interage com o utilizador*/
void io (void)
{
printf ("\nInsira a data de nascimaento no formato dd/mm/aaaa: ");
scanf ("%d/%d/%d", &nasc_ano, &nasc_mes, &nasc_ano); /*Recebe variáveis nasc*/
printf ("\nInsira a data em que se encontra no formato dd/mm/aaaa: ");
scanf ("%d/%d/%d", &hoje_ano, &hoje_mes, &hoje_dia); /*Recebe variáveis hoje*/
}
/*Funçao que conta o número de dias desde o ano currente até à ao próprio dia, não contando com este*/
int total_ano_currente (void)
{
switch (hoje_mes) /*Switch que conta o número de dias passados desde o mês corrente*/
{ /*Falta o comando break para que todos os meses anteriores sejam somados*/
case 12: total_c += meses[10]; //30 novembro
case 11: total_c += meses[9]; //31 outubro
case 10: total_c += meses[8]; //30 setembro
case 9: total_c += meses[7]; //31 agosto
case 8: total_c += meses[6]; //31 julho
case 7: total_c += meses[5]; //30 junho
case 6: total_c += meses[4]; //31 maio
case 5: total_c += meses[3]; //30 abril
case 4: total_c += meses[2]; //31 marco
case 3: total_c += comumoubissexto(hoje_ano)?29:28;//28_29 fevereiro
case 2: total_c += meses[0]; //31 janeiro
}
total_c += hoje_dia-1; /*Adiciona os dias do mês corrente, retirando o dia currente (ainda não passaram 24h)*/
return (total_c);
}
/*Função que conta o número de dias desde o 2.º ano da pessoa até ao ano anterior ao currente*/
int resto_anos (void)
{
int ontem_ano=hoje_ano-1; /*Variável da função com o ano anterior ao corrente*/
int variavel_ano=ontem_ano; /*Variável da função com o ano anterior ao corrente para o loop*/
for (variavel_ano; variavel_ano==nasc_ano; variavel_ano--) /*Conta todos os anos anteriores ao currente*/
{
if (comumoubissexto(variavel_ano)) /*Testa se o ano que está a ser contado é ou não bissexto*/
{
meses[1]=29; /*Se sim conta 29*/
total_total+=meses[0]+meses[1]+meses[2]+meses[3]+meses[4]+meses[5]+meses[6]+meses[7]+meses[8]+meses[9]+meses[10]+meses[11];
}
else
{
meses[1]=28; /*Se não conta 28*/
total_total+=meses[0]+meses[1]+meses[2]+meses[3]+meses[4]+meses[5]+meses[6]+meses[7]+meses[8]+meses[9]+meses[10]+meses[11];
}
}
return (total_total);
}
/*Função que conta o número de dias do primeiro ano*/
int primeiro_ano (void)
{
switch (nasc_mes) /*Switch que conta o número de dias passados desde o dia de nascimento até ao próximo ano*/
{ /*Falta o comando break para que todos os meses seguintes sejam somados*/
case 1: total_primeiro += comumoubissexto()?29:28; //fevereiro
case 2: total_primeiro += meses[2]; //março
case 3: total_primeiro += meses[3]; //abril
case 4: total_primeiro += meses[4]; //maio
case 5: total_primeiro += meses[5]; //junho
case 6: total_primeiro += meses[6]; //julho
case 7: total_primeiro += meses[7]; //agosto
case 8: total_primeiro += meses[8]; //setembro
case 9: total_primeiro += meses[9]; //outubro
case 10: total_primeiro += meses[10]; //novembro
case 11: total_primeiro += meses[11]; //dezembro
}
total_primeiro += meses[nasc_mes-1]-nasc_dia+1; /*Adiciona os dias do mês em que nasceu, subtrai os dias que não viveu e soma o primeiro dia*/
return (total_primeiro);
}
/*Função principal*/
void main (void)
{
void io (void);
int total_ano_currente (void);
int resto_anos (void);
int primeiro_ano (void);
io (); /*Entrada de datas*/
total_ano_currente (); /*Dias desde início do ano currente incluíndo o próprio dia*/
resto_anos (); /*Dias desde 2.º ano até ano anterior ao currente*/
primeiro_ano (); /*Dias desde do 1.º ano*/
printf ("Viveu %lu dias, contando com o currente!", total_c+total_total+total_primeiro); /*FINALMENTE!*/
}
ao compilar:
57 statement has no effect
alguns missing prototypes da função comumoubissexto
ajudem-me por favor e desculpem postar um código tão extenso