Jump to content

Melhorar programar: conversor de segundos


J4cKaSs
 Share

Recommended Posts

Boas sou novo aqui mas espero poder aprender muito, estou a dar programação em C desde o inicio escola, estou no 10º de Informática.

Se alguém souber uma maneira melhor de fazer isto aceito criticas  😁

Espero ter postado no sitio correcto  ?

/*
  Name: Conversor de segundos
  Author: Leandro Domingues
  Date: 29-10-08 13:19
  Description: Este programa converte segundos em horas minutos e segundos
*/
#include <stdio.h>
main()
{
      int hora,minuto,minutos,segundos,segundo;
      
      printf("Introduza os segundos para convercao\n");
      scanf("%d",&segundos);
      
      segundos=segundos;
      segundo=segundos%60;
      minutos=segundos/60;
      minuto=minutos%60;
      hora=minutos/60; 
      
      
      
      printf("\hora: %d\n",hora);
      printf("minuto: %d\n",minuto);
      printf("minutos: %d\n",minutos);
      printf("segundo: %d\n",segundo);
      printf("segundos: %d\n",segundos);
      getchar();
      getchar();
}
Link to comment
Share on other sites

Em C89 (e anterior) não é obrigatório definir especificamente o tipo da função main(). Isto é: o código seguinte é C89 válido

main() { return 0; }

main() é assumida como uma função que recebe um número não especificado de parametros de tipos não especificados e que retorn int.

A partir do C99, todas as funções têem de especificar o tipo (dos parametros e de retorno). O exemplo acima não é C99 válido.

Ainda para o C99, para o caso da função main(), o return 0; não é obrigatório. Caso não exista, o compilador mete lá um automagicamente. O exemplo seguinte é C99 válido

int main(void) {}

Para fazer código válido tanto para C89 como C99, usa o protótipo completo para a função main() e mete lá um return 0;

int main(void) /* ou int main(int argc, char **argv) */
{
  return 0;
}

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Link to comment
Share on other sites

Quando compilares programas usa sempre "-Wall -Werror" na linha de compilação (penso que é igual mais ou menos em todos os compiladores). Isto vai fazer com que o compilador seja o mais rigoroso possível na avaliação da validade do teu código. Alguns programadores consideram isto uma "chatice", mas eu acho que é absolutamente essencial e se estamos a ter dificuldade em nos "livrarmos" de um "warning" é porque não estamos a exprimir-nos correctamente em C ou porque estamos a fazer um erro e ainda não nos apercebemos disso.

Blog: Tróniquices ~ Projecto: EmbeddedDreams.com

Link to comment
Share on other sites

Já agora posso dar um exemplo de como o facto de não teres um return na função main poderia ter-te dado problemas.

Sem o return, a aplicação retorna um código de erro "aleatório" ao sistema operativo. Agora imagina que estavas a chamar a tua aplicação numa Makefile. Se a Makefile invocar uma aplicação e esta retornar um valor diferente de zero (que tipicamente indica que não ocorreu nenhum erro), o make (a aplicação que executa Makefiles) pára nesse ponto, dizendo que houve um erro na aplicação. E tu ficas sem saber o que fazer, pois a aplicação correu bem e não deu nenhum erro... pior, pode dar-se o caso de umas vezes o make dizer que houve erro e outras não, dependendo do valor (aleatório) retornado pela aplicação. Ou pior ainda: um dia de repente o make passa a dar o erro.

p.s.: Se não sabes o que é uma Makefile não te preocupes que hás-de saber 😄.

Blog: Tróniquices ~ Projecto: EmbeddedDreams.com

Link to comment
Share on other sites

So mais uma duvida qual a diferença entre "int main" e "int main(void)"?

int main não é uma assinatura de função completa, falta a indicação dos parâmetros. No caso de int main(void) significa que a função não recebe argumentos. Outra forma de escrever a função main é int main(int argc, char *argv[]). Esta forma é usada para passar argumentos ao programa da consola/linha de comandos. Existem mais assinaturas para a função main, mas não são tão usadas como essas.

<3 life

Link to comment
Share on other sites

Em 31/10/2008 às 01:41, J4cKaSs disse:

qual a diferença entre "int main" e "int main(void)"?

Suponho que a pergunta é

> qual a diferença entre "int main()" e "int main(void)"?

int main() { /*...*/ }

Define (e declara) uma função chamada main, que devolve um int e aceita um número não especificado de parâmetros de tipo não especificado.

int main(void) { /*...*/ }

Define (e declara) uma função chamada main, que devolve um int e aceita 0 parâmetros.

int main(int argc, char **argv) { /*...*/ }

Define (e declara) uma função chamada main, que devolve um int e aceita dois parâmetros. O primeiro parâmetro é um int e o segundo é um char**.

As duas últimas definições estão contempladas no standard do C89 e C99. Qualquer outra definição (*) é inválida para C99. O melhor a fazer é usar sempre uma das duas últimas definições.

(*) excepto definições equivalentes:

a) troca de 'char **argv' por 'char *argv[]'

int main(int argc, char *argv[]) { /*...*/ }

b) dar outros nomes aos parâmetros

int main(int paramc, char **paramv) { /* ... */ }

PS. A diferença entre definição e declaração será abordada numa mensagem posterior 🙂

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.