Ir ao conteúdo
  • Cadastre-se
carloszexa4

C Conversão de segundo em dias, horas, minutos e segundos

Recommended Posts

Estou começando agora a programar em C, e estou em duvida em um código. Eu preciso converter os segundos em dias, horas, minutos e segundos. E preciso mostrar da forma como vou escrever: 1d:00h:00m:00s, e não estou conseguindo concluir sem que quando dê um valor que seja maior que 9 não acrescente o 0. Segue o código como está até o momento.

#include<stdio.h>

   int main(){
    
    int n, d, h,horas_seg, m;
    horas_seg = 3600;
    printf("Digite os segundos: ");
    scanf("%d", &n);
    d = (n /60/60/24);
    h = (n /60/60)%24;
    m = (n/60)%60;
    n = n%60;
    
    if("%d">9){
        printf("%dd:0%dh:0%dm:0%ds", d, h, m,n);   
    }
    else{
        printf("%dd:%dh:%dm:%ds", d, h, m,n);
    }
    
    return 0;
}

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@carloszexa4Então, o usuário da um  "número em segundos" (ex 22000 seg) e deve ser convertido em dias, horas, min e seg? Entendi correto? Por que 9?

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá @carloszexa4.

 

14 horas atrás, carloszexa4 disse:

[...] não estou conseguindo concluir sem que quando dê um valor que seja maior que 9 não acrescente o 0. Segue o código como está até o momento.

 

Então, você precisa entender o que ocorre...

 

Seu código não está nem compilando... apresenta erro na linha 14.

14 13 C:\.....\Untitled1.cpp [Error] ISO C++ forbids comparison between pointer and integer [-fpermissive]

Lá tem isso:

    if("%d">9) {

Ou seja, a sintaxe está incorreta...  Apesar de fazer fazer sentido, é necessário informar qual variável deseja comparar... ex.:

    if(n>9) {

obs.: de qualquer forma a condição está invertida, ou seja, "vai inserir o quando for "<=9".

 

 

 

Na citação você diz:

14 horas atrás, carloszexa4 disse:

[...] sem que quando dê um valor que seja maior que 9 não acrescente o 0.

Tá, mas que valor que não pode ser maior que 0???

 

Essa pergunta, retórica, vale tanto para quem está analisando a sua dúvida, já que precisaríamos entender o que você está tentando fazer, ou seja, teríamos que analisar o código para "supor" o que você tentou fazer; mas, principalmente para você mesmo, ou seja, você entendendo o que você precisa, já é bom caminho... vamos lá:

 

Pelo que eu entendi do seu código, você está tentando adicionar um zero a esquerda quando um números for menor ou igual a 9, para dessa forma, todos os números ficarem com "duas casas".

 

Então, perceba que esta "propriedade" é INDIVIDUAL, ou seja, cada "casa" precisa ser verificada individualmente... não é sempre que todas as casas vão precisar de zeros... os segundos podem ser menor ou igual 9, assim como o minutos podem ou não, assim como as horas podem ou não... (obs.: os dias não precisa!!)... Não será "tudo leva zero" ou "nada leva zero"... como dito, são individuais..

 

Daí você precisa pensar numa para resolver isso.

 

RESUMINDO:

 

Existem diversas formas para resolver, abaixo apresento duas:

 

- Imprime cada valor individualmente, algo assim:

imprime(dias);

se (horas > 9) então //se >9 não precisa de 0
   imprimi(hora)
senão //caso contrário é maior ou igual a 9
   imprime(0,horas)

se (minutos > 9) então //se >9 não precisa de 0
   imprimi(minutos)
senão //caso contrário é maior ou igual a 9
   imprime(0,minutos)

se (segundos > 9) então //se >9 não precisa de 0
   imprimi(segundos)
senão //caso contrário é maior ou igual a 9
   imprime(0,segundos)

 

 

- Cria uma função que verifica se precisa ou não inserir um zero, algo assim:

imprime(dias,duasCasas(horas),duasCasas(minutos),duasCasas(segundos));

Ou seja, se o número for maior que 9 (ex.: 27), a função retornará o próprio número (27)... senão (ex.: 7), retornará um o número com um zero a esquerda (07).

 

***

 

obs.: veja que apenas estou expondo a estrutura.. ai ajusta para o C e também inclui os outros detalhes da formatação, ou seja, fazer sair assim:

14 horas atrás, carloszexa4 disse:

1d:00h:00m:00s

 

 

Qualquer dúvida é só perguntar.

 

No aguardo.

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×