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

J4cKaSs

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

22 mensagens neste tópico

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  :cheesygrin:

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();
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Assim à primeira vista: estás a utilizar uma variável a mais (a variável s e segundos servem para o mesmo) e tens alguns erros de português (convertor -> conversor, convercao -> conversão).

Continua a fazer mais programas. ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado

Foi falta de atenção  :-[

Já está corrigido  :ipool:

Obrigado pela resposta rápida.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já agora a função main deve ter um return, pois é uma função que retorna um int; aliás, deverias ter um "warning" ao compilar esse programa. O valor retornado é normalmente o valor de retorno do processo, pelo que se não ocorreu nehum erro deves retornar tipicamente 0.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O meu professor ensinou nos a por

return 0; apenas se no inicio do programa estiver int main()

e apenas main(), não usar o return 0 , mas sim getchar(); getchar();

:hmm:

Digam me se estou em erro e se é grave  ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Então ensinou mal. A função main tem sempre de retornar um valor.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Yap, em cima já disseram tudo. Agora diz ao teu prof que ele precisa de ir ler o manual, e que lhe recomendas o livro do Kernighan & Ritchie, "Learning C" :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É assim o prof não tem culpa na volta ele está a não crer dificultar a situação.

É boa pessoa e preocupa-se com a turma, em 2 dias eu já estava a programar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sigam os conselhos do Njay. Activem sempre os níveis máximos de warnings. Assim a maioria dos bugs morre logo com o compilador. :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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 :D.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

a funcao main nao tem sempre de returnar um valor podes usar void main e não retornas nenhum valor, sei que não e aconselhado e bla bla bla, mas podes fazer... :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Foi acabado de dizer que isso não é uma construção legal em C. :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Há muitas coisas que podes fazer em C e não é por isso que as deves fazer. Se declaras a função como void ela vai retornar um valor aleatório ao sistema operativo, com as suas possíveis consequências negativas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

eu retorno sempre 0.

tanto quanto sei quando se retorna -1 é que é indicação ao SO de erro...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Então vou seguir os concelhos que me deram, ainda para mais sou novo em C, então meto sempre "int main", "return 0;" e compilador sempre a ver os erros Todinhos.

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

Desculpem estar com tantas perguntas mas alguém pode vir a aprender com isto.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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 paramêtros de tipo não especificado.

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

Define (e declara) uma função chamada main, que devolve um int e aceita 0 paramêtros.

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

Define (e declara) uma função chamada main, que devolve um int e aceita dois paramêtros. O primeiro paramêtro é 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[]) { /*...*/ }

:P dar outros nomes aos parametros

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

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Fiquei esclarecido muito obrigado, vejo que é uma boa comunidade  :cheesygrin:

cumprimentos

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