Jump to content
Andrepereira9

Funções

Recommended Posts

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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • 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.