Programa: Criando um menu usando funções em C

Para ilustrar bem o uso das funções, vamos repetir um exercício que fizemos quando estudamos testes condicionais e laços.

Aqui, vamos criar um aplicativo em C que exibe algumas frases e invoca funções.

Clique aqui e saiba como obter seu certificado de programação C! Entre já no Mercado de Trabalho!

Exemplo de código em C

Crie um programa em C que exiba um menu e converse com o usuário.

Vamos exibir um menu, com algumas saudações, para o usuário escolher.
Essa opção ficará armazenada na variável inteira 'continuar', que também será usada como condição para que o laço DO WHILE ocorra.

Assim, caso o usuário digite 0, ele vai sair do programa.
Caso ele digite qualquer outro número, a opção é tratada pelo teste condicional SWITCH.

Bem, se você estudou todas as aulas de nosso curso, sobre testes e laços, você já é um mestre.
Então não precisamos entrar muito em detalhes, apenas olhando para o código você já nota o que está acontece.

Nosso foco aqui é nas funções.
Note o SWITCH e seus cases, como ficaram menor, mais organizados e bonitos.

#include<stdio.h>

void oi()
{
    printf("Oi!\n");
}

void tudo_bem()
{
    printf("Tudo otimo, e com voce?\n");
}

void familia()
{
    printf("Meus bits...digo, minha familia vai bem!\n");
}

void sair()
{
    printf("Ja vai??? Nao! Nao! Espere! Naa...\n");
}


int main()
{
    int continuar=1;

    do
    {
        printf("\n\tChat Foreve Alone\n\n");
        printf("1. Oi\n");
        printf("2. Tudo bem\n");
        printf("3. Como vai a familia\n");
        printf("0. Sair\n");

        scanf("%d", &continuar);
        system("cls || clear");

        switch(continuar)
        {
            case 1:
                oi();
                break;

            case 2:
                tudo_bem();
                break;

            case 3:
                familia();
                break;

            case 0:
                sair();
                break;

            default:
                printf("Digite uma opcao valida\n");
        }
    } while(continuar);
}

Bacana, essas funções, não?



31 comentários:

  1. Otima explicação, obrigado.

    ResponderExcluir
  2. Muito legal!!! Parabéns pelo Ótimo site!!! e Obrigado por disponibilizar esse ótimo curso!!! Obrigado!!!

    ResponderExcluir
  3. Excelente site! explicação muito clara e objetiva. Parabéns pelo trabalho e obrigado por disponibilizar para nós.

    Murilo Almeida

    ResponderExcluir
  4. Desculpe, mas porque você teve que declarar que a variável continuar fosse igual a 1?

    ResponderExcluir
  5. Sou meio leigo no assunto, mas por que voce declarou a variável continuar=1 ?

    ResponderExcluir
  6. Continuar está ali para criar um loop, caso vc queira continuar no programa, ele pede pra vc digitar um valor que será o continuar, se for igual a 1, ele continua.

    ResponderExcluir
  7. Ali no if continua=1

    não seria
    if continua==1?








    /

    ResponderExcluir
  8. Olá Anônimo,

    Na verdade ali não é um if e sim um int.

    ResponderExcluir
  9. Eu adaptei o código da seguinte maneira:
    [b]#include
    #include

    int main() {
    int continuar;
    printf("\n\tQual pessoa voce e, digite o numero\n\n");
    printf("1. Fabio Pavan\n");
    printf("2. Vinicius Melegari\n");
    printf("3. Luiz Godinho\n");
    printf("4. Alessandro Pavan\n");
    scanf("%d", &continuar);

    if (continuar == 1) {
    printf("\nOla, voce e o N.E.R.D que me criou.\n");
    }

    if (continuar == 2) {
    printf("\nERRO: TROLL DETECADO! SOBRECARGA NO SISTEMA!\n");
    }

    if (continuar == 3) {
    printf("\nTa mais baixo que o Vinicius.\n");
    }

    if (continuar == 4) {
    printf("\nUm retardado jogador de League of Legends (lol)\n");
    }

    system("pause");
    }[b]

    ResponderExcluir
  10. Que legal, está sendo muito útil para mim. Sucesso aí pessoal! Obrigadoooo

    ResponderExcluir
  11. Quando eu uso qualquer opção o programa para de funcionar.O que pode ser isso ?
    Se tiver algum tópico no fórum, por favor, me passe o link.

    ResponderExcluir
  12. O meu tambem programa esta dando erro na hora de compilar, qual o problema no codigo?

    #include
    #include

    void Oi()
    {
    printf("Iaew fera\n");
    }

    void bem()
    {
    printf("Tudo bem, e com vc\n");
    }

    void sair()
    {
    printf("Entao ate mais tarde\n");
    }

    int main()
    {
    int continuar=1;

    printf("\n\tChat\n");
    printf("1- Ola\n");
    printf("2- Tudo bem\n");
    printf("3- Tenho que sair\n");

    scanf("%d", continuar);
    system("cls || clear");

    switch(continuar)
    {
    case 1:

    Oi();
    break;

    case 2:

    bem();
    break;

    case 3:

    sair();
    break;

    default:

    printf("Codigo invalido.\n");
    break;
    }
    }

    ResponderExcluir
  13. Gostaria de saber como criar um menu com matriz. (corretamente)
    eu tentei criar e deu certo porem nao consigo acessa lo.


    ao digitar a opção o programa fecha
    isso começou a acontecer dps que adicionei a matriz na função.
    existe alguma outra forma de fazer isso?
    obrigado

    ex: void adm(float x[][3])
    {
    MENU usando a matriz....
    }
    int main ()
    {
    int op;
    do{
    printf("1- modo adm");
    printf("2-sair");
    scanf("%d",&op);
    switch(op)
    {
    case 1:
    adm(x);
    break;
    case2:
    printf("encerrando");
    break
    }while(op!=2);
    getch();
    }

    ResponderExcluir
  14. Por que ao digitar '0' o programa fecha?

    ResponderExcluir
  15. O #include não está completo

    experimente colocar
    #include
    #include

    e recompilar o programa.

    ResponderExcluir
  16. Faltou e '&' antes da variável continuar, no seu programa.

    ResponderExcluir
  17. Vinicius Gaio, você esqueceu quem na função "scanf("%d",continuar)" você tem que colocar o sinal "&" antes da variavel "continuar".

    ResponderExcluir
  18. o laço de repetição...

    ResponderExcluir
  19. Vinicius Gaio, sei que é um pouco tarde pra resposta, mas eu to fazendo o curso agora, kkk, mas enfim. O erro no seu código é porque está faltando o "&" no scanf(). E também, apesar de não ser um erro, você poderia ter colocado tudo isso num laço while, pra o menu ser repetido até o usuário querer sair.

    ResponderExcluir
  20. se o programa estiver parando, experimenta colocar a valor na variável de entrada que seja diferente da opção de saída, isso na hora de indicar

    ResponderExcluir
  21. ele colocou o valor da variável de entrada para receber 1, para não acontecer dela ficar igual a opção de saída do case

    ResponderExcluir
  22. Quando eu uso system("clear"), o programa roda, mas aparece a mensagem: TERM environment variable not set. O que seria?? 'cls' também não funciona. (To usando XCode OSX.)

    ResponderExcluir
  23. Meio tarde mas , se alguém ainda precisar da resposta, tem que incluir a biblioteca #include dai o system ("cls||clear") funcionará.

    ResponderExcluir
  24. boas pessoal, tenho aqui um codigo e preciso de fazer os menus, para a media, maior, menor, ordenar e depois sair, podem me ajudar, tou começando a programar e nao estou a perceber esta parte

    #include
    float media (int *vetor, int n) {
    int i, soma=0;
    for (i=0; imax)
    max=vetor[i];
    return max;
    }
    int menor (int *vetor, int n) {
    int i, min=vetor[0];
    for (i=1; ivetor[j]){
    temp= vetor [i];
    vetor[i]=vetor[j];
    vetor[j]=temp;
    }
    }
    int main (){
    int i, num []={3,6,1,4,2};
    printf ("media:%.1f\n", media(num, 5));
    printf ("maior:%i\n", maior (num, 5));
    printf ("menor:%i\n", menor (num, 5));
    ordena (num, 5);
    printf ("vetor ordenado:");
    for (i=0; i<5; i++)
    printf ("%i\t", num[i]);
    return 0;
    }

    desde ja obrigado!!!

    ResponderExcluir
  25. fiz o meu código encima desse :
    #include
    #include

    #include "programa1.cpp"
    #include "programa2.cpp"
    #include "programa3.cpp"
    #include "programa4.cpp"
    #include "programa5.cpp"
    #include "programa6.cpp"
    #include "programa7.cpp"
    #include "programa8.cpp"
    #include "programa9.cpp"
    #include "programa10.cpp"

    int sair();


    void menu(void){

    int MENU=1;

    do
    {
    printf("\n\t\t-| Menu de Programas |-\n\n");
    printf("\t1. Programa 1\n");
    printf("\t2. Programa 2\n");
    printf("\t3. Programa 3\n");
    printf("\t4. Programa 4\n");
    printf("\t5. Programa 5\n");
    printf("\t6. Programa 6\n");
    printf("\t7. Programa 7\n");
    printf("\t8. Programa 8\n");
    printf("\t9. Programa 9\n");
    printf("\t10. Programa 10\n");
    printf("\t0. Sair\n");
    printf("\n\tQual Programa você quer ? \n");

    scanf("%d", &MENU);
    system("cls || clear");

    switch(MENU)
    {
    case 1:
    prog1();system("pause");
    break;

    case 2:
    prog2();system("pause");
    break;

    case 3:
    prog3();system("pause");
    break;

    case 4:
    prog4();system("pause");
    break;

    case 5:
    prog5();system("pause");
    break;

    case 6:
    prog6();system("pause");
    break;

    case 7:
    prog7();system("pause");
    break;

    case 8:
    prog8();system("pause");
    break;

    case 9:
    prog9();system("pause");
    break;

    case 10:
    prog10();system("pause");
    break;

    case 0:
    sair();
    break;

    default:
    printf("Digite uma opcao valida\n");
    }
    }while(MENU!=0);

    }
    int sair(){

    return 0;
    }

    ResponderExcluir
  26. Ouve Vinicius Gajo, tu tens de indicar qual é a tua função, por isso é que te está a dar erro. No #include tens de colocar à frente o nome da tua função.

    ResponderExcluir
  27. Vinicius Gaio, isto era o que eu te estava a dizer mostrando no teu código.

    #include
    #include

    void Oi()
    {
    printf("Iaew fera\n");
    }

    void bem()
    {
    printf("Tudo bem, e com vc\n");
    }

    void sair()
    {
    printf("Entao ate mais tarde\n");
    }

    int main()
    {
    int continuar=1;

    printf("\n\tChat\n");
    printf("1- Ola\n");
    printf("2- Tudo bem\n");
    printf("3- Tenho que sair\n");

    scanf("%d", continuar);
    system("cls || clear");

    switch(continuar)
    {
    case 1:

    Oi();
    break;

    case 2:

    bem();
    break;

    case 3:

    sair();
    break;

    default:

    printf("Codigo invalido.\n");
    break;
    }
    }

    ResponderExcluir
  28. Eu não sei como vou usar o mostrar o menu na nem o usuário.

    ResponderExcluir
  29. oi estou começando agora não acerteu fazer o menu de opçao

    ResponderExcluir

É quase impossível criar centenas de páginas voltadas para programação C e não cometer algum erro.

- Se notar algum conceito, letra ou trecho de código errado, deixe sua correção

- Se perceber uma maneira melhor ou mais eficiente de fazer algo, deixe sua ideia

- Se algo não ficar claro ou for confuso, nos avise

Aos poucos vamos aumentando e melhorando a qualidade de nosso material, e para isso contamos com sua ajuda.