Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Andrepereira9

Funções

Mensagens Recomendadas

Andrepereira9

Boas Noites

Já trabalhei em C, à cerca de 5 anos, mas depois virei para o VB. Net...

Eu estou a tentar criar funções e tenho isto assim

#include <stdio.h>

void menu_principal()
{

printf ("***** Bem-Vindo ao InspLeiria *****\n\n");
printf ("Menu Principal\n");
printf ("(C)lientes\n");
printf ("(A)utomóveis\n");
printf ("(I)nspeções\n");
printf ("(E)statisticas\n");
printf ("(S)air e guardar\n");

int repetir = 1;
char opcao;


while (repetir != 0)
{

  printf ("\nIntroduza a sua opção: ");
  fflush(stdin);
  gets (&opcao);
  repetir = 0;

  switch (opcao)
  {
case 'C':
case 'c':
 limpa_ecra();
 menu_clientes();
 break;

case 'A':
case 'a':
 printf ("Automóveis\n");
 break;

case 'I':
case 'i':
 printf ("Inspeções\n");
 break;

case 'E':
case 'e':
 printf ("Estatisticas\n");
 break;

case 'S':
case 's':
 printf ("repetir e guardar\n");
 break;

default:
 printf ("\nEscolheu uma opção Inválida! Por favor tente novamente!!\n");
 repetir = 1;

  }
}

}

void menu_clientes()
{
printf ("***** InspLeiria *****\n\n");
printf ("Menu Cliente\n");
printf ("(I)nserir Cliente\n");
printf ("(E)ditar Cliente\n");
printf ("(P)esquisar Cliente (BI)\n");
printf ("(L)istar Clientes\n");
printf ("(V)oltar\n");
int repetir = 1;
char opcao;


while (repetir != 0)
{

  printf ("\nIntroduza a sua opção: ");
  fflush(stdin);
  gets (&opcao);
  repetir = 0;

  switch (opcao)
  {
case 'I':
case 'i':
 printf ("(I)nserir Cliente\n");
 break;

case 'E':
case 'e':
 printf ("(E)ditar Cliente\n");
 break;

case 'P':
case 'p':
 printf ("(P)esquisar Cliente (BI)\n");
 break;

case 'L':
case 'l':
 printf ("(L)istar Clientes\n");
 break;

case 'V':
case 'v':
 limpa_ecra();
 menu_principal();
 break;

default:
 printf ("\nEscolheu uma opção Inválida! Por favor tente novamente!!\n");
 repetir = 1;

  }
 }

}
void limpa_ecra()
{
printf("\x1b[2J\x1b[1;1H");
}

int main (void)
{

menu_principal();
//escolha_menu();


return (0);

}
 

Mas depois ao compilar, apesar de funcionar, aparecem-me os seguintes avisos.... Queria saber se existe alguma maneira de criar funções sem ele me chatear que estou a chama-las antes delas serem "criadas".... No vb.net podia criar modulos e chamar o modulo quando precisa-se.... Aqui dá para fazer o mesmo?

Citação
gcc -Wall -o "trabalho" "trabalho.c" (na directoria: /home/andre/Área de Trabalho)

trabalho.c: Na função ‘menu_principal’:

trabalho.c:32:6: warning: implicit declaration of function ‘limpa_ecra’ [-Wimplicit-function-declaration]

trabalho.c:33:6: warning: implicit declaration of function ‘menu_clientes’ [-Wimplicit-function-declaration]

trabalho.c: No nivel superior:

trabalho.c:66:6: warning: conflicting types for ‘menu_clientes’ [habilitado por padrão]

trabalho.c:33:6: note: previous implicit declaration of ‘menu_clientes’ was here

trabalho.c:126:6: warning: conflicting types for ‘limpa_ecra’ [habilitado por padrão]

trabalho.c:32:6: note: previous implicit declaration of ‘limpa_ecra’ was here

Compilação concluída com sucesso.

PS: Estou a usar Geany, em Ubuntu 12.10


A informática chegou para resolver problemas que antes não existiam

Quem ri por último é porque está conectado a 52 Kbs.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pwseo

Não podes utilizar funções que ainda não foram declaradas. Para solucionar esse problema, deves declarar o protótipo das funções no topo do ficheiro (a seguir aos includes, antes do resto):

void limpa_ecra();
void menu_clientes();

P.S.: o teu código tem uma indentação que induz as pessoas em erro.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
eatg75

Ou podes definir as tuas funcoes antes da seccao onde elas estao a ser chamadas. i.e. :

/* Suponhamos que tens 2 funcoes f1() e f2() e ambas, chamadas
* na funcao main() e a funcao f2() tem a particularidade de ser
* chamada na funcao f1(), poderias definir as funcoes na
* seguinte  ordem:
*/

// f2() antes da funcao f1() e main()
int f2() {
   retucn 0;
}

// f1() apos f2() e antes de main()
int f1() {
  // faz o que tem a de fazer e retorna
 f2();
 return 0;
}

int main(int argc, char** argv) {
   f1();
   f2();

   return 0;
}

Ah uma sugestao ve uma das funcoes tolower() e toupper(), e tenta intender a diferenca e do... while e while.


Victarion seized the dusky woman by the wrist and pulled her to him.

Victarion - She will do it. Go pray to your red god. Light your fire, and tell me what you see.

Moqorro's dark eyes seemed to shine.

Moqorro - I see dragons.

Partilhar esta mensagem


Ligação 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

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.