Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
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;
}

 

Editado por Simon Viegas
Inserir tag CODE
  • 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?

Editado por santos container
  • 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.

 

Editado por Simon Viegas
  • 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






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

×