Ir ao conteúdo

Exercício em C


maluga

Posts recomendados

Postado

Estou com problemas nesta questão.

9. Quando se faz uma chamada telefônica, a central responsável pela chamada registra automaticamente numa tabela de ligações os seguintes dados: (a) número do telefone de quem fez a chamada; (B) o numero de telefone chamado; © horário de início da chamada; e (d) horário de fim da chamada. A partir destes dados, o computador é capaz de calcular o preço da ligação e quem é o dono da linha. Defina em C esta tabela de ligações. Para isto defina o tipo de dados Telefone composto dos seguintes campos: o prefixo da área (2 dígitos) e o restante do número (8 dígitos). Um instante no tempo pode ser representado por uma Data (dia, mês e ano) e uma Hora (horas, minutos e segundos).

Toda vez que eu testo o programa ele vai normal porém na hora que eu tento exibir a data tanto a primeira como a segunda na forma dd/mm/aa.O mês sempre aparece como 0.

esse é o código que fiz.

#include <stdio.h>

typedef struct

{

int prefixo;

int numero_usado;

}telefone;

typedef struct

{

int prefixo;

int numero_discado;

}telefone_discado;

typedef struct

{

char dia;

char mes;

int ano;

char hora;

char minuto;

char segundo;

}data_inicio;

typedef struct

{

char dia;

char mes;

int ano;

char hora;

char minuto;

char segundo;

}data_fim;

typedef struct

{

telefone x;

telefone_discado y;

data_inicio z;

data_fim w;

}tabela;

int main()

{

tabela ligacao;

printf ("Digite o prefixo da area onde a ligacao foi feita: ");

scanf("%d",&ligacao.x.prefixo);

while(ligacao.x.prefixo<=0)

{

printf("Prefixo incorreto.");

printf("Digite o prefixo da area onde a ligacao foi feita: ");

scanf("%d",&ligacao.x.prefixo);

}

printf("\nDigite o numero do telefone de quem fez a chamada: ");

scanf("%d",&ligacao.x.numero_usado);

while(ligacao.x.numero_usado<0)

{

printf("Numeros de telefone so podem ser positivos.");

printf("\nDigite o numero do telefone de quem fez a chamada: ");

scanf("%d",&ligacao.x.numero_usado);

}

printf("\nDigite o prefixo da area para onde foi feita a ligacao: ");

scanf("%d",&ligacao.y.prefixo);

while(ligacao.y.prefixo<=0)

{

printf("Prefixo incorreto.");

printf("\nDigite o prefixo da area para onde foi feita a ligacao: ");

scanf("%d",&ligacao.y.prefixo);

}

printf("\nDigite o numero do telefone chamado: ");

scanf("%d",ligacao.y.numero_discado);

while(ligacao.y.numero_discado<0)

{

printf("Numeros de telefone so podem ser positivos.");

printf("\nDigite o numero do telefone chamado: ");

scanf("%d",ligacao.y.numero_discado);

}

printf("\nDigite o numero do mes que comecou a ligacao: ");

scanf("%d",&ligacao.z.mes);

while(ligacao.z.mes<=0||ligacao.z.mes>12)

{

printf("Valor incorreto para um mes do ano.");

printf("\nDigite o numero do mes que comecou a ligacao: ");

scanf("%d",&ligacao.z.mes);

}

printf("\nDigite o dia que comecou a ligacao: ");

scanf("%d",&ligacao.z.dia);

while(ligacao.z.dia<=0)

{

printf("Numero incorreto.");

printf("\nDigite o dia que comecou a ligacao: ");

scanf("%d",&ligacao.z.dia);

}

printf("\nDigite o ano que comecou a ligacao: ");

scanf("%d",&ligacao.z.ano);

while(ligacao.z.ano<0)

{

printf("Valor incorreto para um ano.");

printf("\nDigite o ano que comecou a ligacao: ");

scanf("%d",&ligacao.z.ano);

}

printf("\nDigite a hora que comecou a ligacao: ");

scanf("%d",&ligacao.z.hora);

while(ligacao.z.hora<0||ligacao.z.hora>24)

{

printf("Valor muito alto ou muito baixo para uma hora do dia.");

printf("\nDigite a hora que comecou a ligacao: ");

scanf("%d",&ligacao.z.hora);

}

printf("\nDigite o minuto que comecou a ligacao: ");

scanf("%d",&ligacao.z.minuto);

while(ligacao.z.minuto<0||ligacao.z.minuto>60)

{

printf("Valor muito alto ou muito baixo para a casa dos minutos.");

printf("\nDigite o minuto que comecou a ligacao: ");

scanf("%d",&ligacao.z.minuto);

}

printf("\nDigite o segundo que comecou a ligacao: ");

scanf("%d",&ligacao.z.segundo);

while(ligacao.z.segundo<0||ligacao.z.segundo>60)

{

printf("Valor muito alto ou muito baixo para a casa dos segundos.");

printf("\nDigite o segundo que comecou a ligacao: ");

scanf("%d",&ligacao.z.segundo);

}

printf("\nDigite o numero do mes que terminou a ligacao: ");

scanf("%d",&ligacao.w.mes);

while(ligacao.w.mes<=0||ligacao.w.mes>12)

{

printf("Valor incorreto para um mes do ano.");

printf("\nDigite o numero do mes que terminou a ligacao: ");

scanf("%d",&ligacao.w.mes);

}

printf("\nDigite o dia que terminou a ligacao: ");

scanf("%d",&ligacao.w.dia);

while(ligacao.w.dia<=0)

{

printf("Numero incorreto.");

printf("\nDigite o dia que terminou a ligacao: ");

scanf("%d",&ligacao.w.dia);

}

printf("\nDigite o ano que terminou a ligacao: ");

scanf("%d",&ligacao.w.ano);

while(ligacao.w.ano<0)

{

printf("Valor incorreto para um ano.");

printf("\nDigite o ano que terminou a ligacao: ");

scanf("%d",&ligacao.w.ano);

}

printf("\nDigite a hora que terminou a ligacao: ");

scanf("%d",&ligacao.w.hora);

while(ligacao.w.hora<0||ligacao.w.hora>24)

{

printf("Valor muito alto ou muito baixo para uma hora do dia.");

printf("\nDigite a hora que terminou a ligacao: ");

scanf("%d",&ligacao.w.hora);

}

printf("\nDigite o minuto que terminou a ligacao: ");

scanf("%d",&ligacao.w.minuto);

while(ligacao.w.minuto<0||ligacao.w.minuto>60)

{

printf("Valor muito alto ou muito baixo para a casa dos minutos.");

printf("\nDigite o minuto que terminou a ligacao: ");

scanf("%d",&ligacao.w.minuto);

}

printf("\nDigite o segundo que terminou a ligacao: ");

scanf("%d",&ligacao.w.segundo);

while(ligacao.w.segundo<0||ligacao.w.segundo>60)

{

printf("Valor muito alto ou muito baixo para a casa dos segundos.");

printf("\nDigite o segundo que terminou a ligacao: ");

scanf("%d",&ligacao.w.segundo);

}

/*Exibição dos numeros obtidos na tela*/

printf("Origem (%d) ",ligacao.x.prefixo);

printf("%d \n",ligacao.x.numero_usado);

printf("Destino (%d) ",ligacao.y.prefixo);

printf("%d \n",ligacao.y.numero_discado);

printf("Inicio da ligacao(hora): %d:",ligacao.z.hora);

printf("%d:",ligacao.z.minuto);

printf("%d \n",ligacao.z.segundo);

printf("Data de inico da ligacao: %d",ligacao.z.dia);

printf("/%d",ligacao.z.mes);

printf("/%d \n",ligacao.z.ano);

printf("Finalizacao da ligacao(hora): %d:",ligacao.w.hora);

printf("%d:",ligacao.w.minuto);

printf("%d \n",ligacao.w.segundo);

printf("Data de finalizacao da ligacao: %d",ligacao.w.dia);

printf("/%d",ligacao.w.mes);

printf("/%d \n",ligacao.w.ano);

return 0;

}

Obrigado a quem puder ajudar.

Postado

Se erro está aqui ( pelo menos na parte que você estava com problema )

char mes;

char dia;

printf("\nDigite o numero do mes que comecou a ligacao: ");

scanf("%d",&ligacao.z.mes);

while(ligacao.z.mes<=0||ligacao.z.mes>12)

printf("\nDigite o dia que terminou a ligacao: ");

scanf("%d",&ligacao.w.dia);

while(ligacao.w.dia<=0)

OBS: Variável CHAR só grava 1 caracter

Não sei se seu prog deve considerar isso .. mas vai uma coisa que encontrei...

os dias não estão sendo validados pelo mês... por ex... ele pode digitar dia 31 no mes de fev... ou até dia 40... 50 .. 70 ... 100

não sei se deve ser implementado mas fica o comentário

Postado

Opa valeu,mas uma pergunta se pro "mês" e "dia" eu devo definir como "int" para eles aparecerem certinho na hora da exibição,porque o mesmo não acontece com a "hora","minuto" e "segundo"(Esses não deram problema na exibição em nenhum momento aqui)?

Eu ainda to pensando em uma forma pra eu incluir anos bisextos também no meu código,por isso não botei o limite dos dias ainda.Se tiver uma sugestão pra isso agradeço muito.

Postado
Opa valeu,mas uma pergunta se pro "mês" e "dia" eu devo definir como "int" para eles aparecerem certinho na hora da exibição,porque o mesmo não acontece com a "hora","minuto" e "segundo"(Esses não deram problema na exibição em nenhum momento aqui)?

Eu ainda to pensando em uma forma pra eu incluir anos bisextos também no meu código,por isso não botei o limite dos dias ainda.Se tiver uma sugestão pra isso agradeço muito.

Ano bisexto tem uma formula na internet só procurar...

quanto a hora minuto e segundo.... ai eu não sei =X

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...