• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Gil

tratar dia, mês, ano...

4 mensagens neste tópico

preciso fazer um código que solicite do usuário o dia, mês e ano. o mês pode ser o seu numero, nome ou abreviação. Depois ele tem que imprimir o total de dias do ano até o dia digitado. Estou tentando fazer isso, mas tenho pouco conhecimento nesta linguagem. o código que fiz só da erro. se alguem poder me ajudar, agradeço.

#include <stdio.h>
#include <stdlib.h>

char A[3][12] = {'jan', 'fev', 'mar', 'abr', 'mai', 'jun', 'jul', 'ago', 'set',
'out', 'nov', 'dez'};
char B[9][12] = {'janeiro', 'fevereiro', 'março', 'abril', 'maio', 'junho',
'julho', 'agosto', 'setembro', 'outubro', 'novembro', 'dezembro'};
int C[12] = {31,28,31,30,31,30,31,31,30,31,30,31};

void trat_data (void);

void leitura(void);

void imprime (void);

int main(){

leitura();
//trat_data();
imprime ();

system ("pause");
return 0; 
}

void leitura (void){

int dia, ano;
char mes[9];

printf ("Entre com o dia: ");
scanf ("%d", &dia);
fflush(stdin);
printf ("Entre com o mês (Ex.: janeiro ou jan ou 1): ");
gets(mes);
printf ("Entre com o ano: ");
scanf ("%d", &ano);

}

void trat_data (void){

int mesn, dias, total;

if (mes == 'jan'||'janeiro'||'fev'||'fevereiro'||'mar'||'març o'||'abr'||
'abril'||'mai'||'maio'||'jun'||'junho'||'jul'||'ju lho'||'ago'
||'agosto'||'set'||'setembro'||'out'||'outubro'||' nov'||
'novembro'||'dez'||'dezembro')
{ 
switch (mes){
case 'jan':
'janeiro':
mesn = 1;
break;
case 'fev':
'fevereiro':
mesn = 2;
break;
case 'mar':
'março':
mesn = 3;
break;
case 'abr':
'abril':
mesn = 4;
break;
case 'mai':
'maio':
mesn = 5;
break;
case 'jun':
'junho':
mesn = 6;
break;
case 'jul':
'julho':
mesn = 7;
break;
case 'ago':
'agosto':
mesn = 8;
break;
case 'set':
'setembro':
mesn = 9;
break;
case 'out':
'outubro':
mesn = 10;
break;
case 'nov':
'novembro':
mesn = 11;
break;
case 'dez':
'dezembro':
mesn = 12;
break;
default:
mesn = atoi(mes);

}

for (i=0;i<=(mes-1);i++)
{
dias = dias +C[i];
}
total = dias + dia;
}

void imprime (void){

printf ("%d\n", total);
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não percebi bem o enunciado, ele tem que imprimir o número total de dias do presente ano até ao dia indicado?

Já agora podias dizer em que parte estás com mais dificuldade...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

void leitura (void){

int dia, ano;
char mes[9];

printf ("Entre com o dia: ");
scanf ("%d", &dia);
fflush(stdin);
printf ("Entre com o mês (Ex.: janeiro ou jan ou 1): ");
gets(mes);
printf ("Entre com o ano: ");
scanf ("%d", &ano);

}

Estás a declarar as variáveis localmente a essa função. Ou seja, nas outras funções não irás poder aceder-lhes. E não é boa ideia fazer flush ao stdin.

void trat_data (void){

int mesn, dias, total;

Mesma coisa que na situação de cima. Neste caso particular como só vais precisar de uma variável depois (total) podes e deves fazer return ao seu valor.

if (mes == 'jan'||'janeiro'||'fev'||'fevereiro'||'mar'||'març o'||'abr'||
'abril'||'mai'||'maio'||'jun'||'junho'||'jul'||'ju lho'||'ago'
||'agosto'||'set'||'setembro'||'out'||'outubro'||' nov'||
'novembro'||'dez'||'dezembro')
{ 

Já estou um pouco enfurregado de C, mas penso que isto só vai fazer a comparação do mes com 'jan'. O resto vai ser comparações de string ou seja vai dar sempre verdadeiro porque, por exemplo, 'janeiro' não é null nem string vazia. O mesmo para as outras. O que queres é comparar individualmente o mes com a string. Primeiro não deves usar == mas sim strncmp. Depois comparar uma a uma dá muito trabalho. Mais vale pores num ciclo for e verificares directamente com o valor desse indice no array dos meses. Isso tornava o uso do switch desnecessário.

switch (mes){
case 'jan':
'janeiro':
mesn = 1;
break;

O case está mal feito. Deves por também case em 'janeiro'.

for (i=0;i<=(mes-1);i++)
{
dias = dias +C[i];
}
total = dias + dia;
}

Apesar de estar correcto, é contra-intuítivo e o pessoal costuma usar diferentemente.

total = dia
for(i = 0; i < mes; i++) 
   total += C[i];

Podes é claro remover o uso de total e usar apenas a variavel dia.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

2 coisas:

1) em C não podes comparar strings assim. Tens de usar uma função como a strcmp( string , string )

2) esse switch não te dá vantagem nenhuma... faz um ciclo de 0 (janeiro) a 11 (dezembro) e compara o mes com os arrays k definiste.

código pequeno, correcto e eficiente (quando baste)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora