Tayousa Postado Abril 15, 2015 Denunciar Share Postado Abril 15, 2015 (editado) Não entendo porque o switch deste programa não está funcionando, quando escolho a opção entra no system ("pause"); #include <stdio.h> #include <stdlib.h> void menu(); void limpartela(); void sair(); void enter(); void denter(); void dentertabula(); void tabula(); void soma(); void subt(); void multi(); void divi(); char opc; int main() { menu(); system ("pause"); return 0; } void limpartela() { system("cls"); } void sair() { exit(1); } void enter() { printf("\n"); } void denter() { printf("\n\n"); } void dentertabula() { printf("\n\n\t"); } void tabula() { printf("\t"); } void menu() { limpartela(); int esc; printf("Que calculo voce quer fazer?"); dentertabula(); printf("1 - Soma"); enter(); tabula(); printf("2 - Subtracao"); enter(); tabula(); printf("3 - Multiplicacao"); enter(); tabula(); printf("4 - Divisao"); enter(); tabula(); printf("5 - Sair"); enter(); printf("Opcao: "); scanf("%d", &esc); getchar(); switch (esc) { case 1: void soma(); break; case 2: void subt(); break; case 3: void multi(); break; case 4: void divi(); break; case 5: void sair(); break; default: menu(); } } void soma(void) { limpartela(); int a, b, soma; printf("Digite os valores da soma:"); enter(); tabula(); printf("valor: "); scanf("%d", &a); tabula(); printf("+"); tabula(); printf("valor: "); scanf("%d", &b); soma = a + b; tabula(); printf("%d + %d = %d", a, b, soma); printf("\n\nResultado: %d", soma); printf("Resultado: %d", soma); printf("Deseja voltar ao menu? (s/n)"); scanf("%c", &opc); getchar(); if (opc=='s') { menu(); }else{ denter(); printf("Obrigado! "); } } void subt() { limpartela(); int c, d, sub; printf("Digite os valores da subtracao:"); enter(); tabula(); printf("valor: "); scanf("%d", &c); tabula(); printf("-"); tabula(); printf("valor: "); scanf("%d", &d); sub = c - d; tabula(); printf("%d - %d = %d", c, d, sub); printf("Resultado: %d", sub); printf("Deseja voltar ao menu? (s/n)"); scanf("%c", &opc); getchar(); if (opc=='s') { menu(); }else{ denter(); printf("Obrigado! "); } } void multi() { limpartela(); int e, f, mul; printf("Digite os valores da multiplicacao:"); enter(); tabula(); printf("valor: "); scanf("%d", &e); tabula(); printf("*"); tabula(); printf("valor: "); scanf("%d", &f); mul = e * f; tabula(); printf("%d * %d = %d", e, f, mul); printf("Resultado: %d", mul); printf("Deseja voltar ao menu? (s/n)"); scanf("%c", &opc); getchar(); if (opc=='s') { menu(); }else{ denter(); printf("Obrigado! "); } } void divi() { limpartela(); int g, h, div; printf("Digite os valores da divisao:"); enter(); tabula(); printf("valor: "); scanf("%d", &g); tabula(); printf("/"); tabula(); printf("valor: "); scanf("%d", &h); div = g / h; tabula(); printf("%d / %d = %d", g, h, div); printf("Resultado: %d", div); printf("Deseja voltar ao menu? (s/n)"); scanf("%c", &opc); getchar(); if (opc=='s') { menu(); }else{ denter(); printf("Obrigado! "); } } Editado Abril 15, 2015 por Tayousa Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 LazaroBinda Postado Abril 16, 2015 Denunciar Share Postado Abril 16, 2015 case 1: void soma(); break; case 2: void subt(); break; case 3: void multi(); break; case 4: void divi(); break; case 5: void sair(); break; Na verdade seu programa não deveria nem ter compilado. você está utilizando a palavra reservada "void" na chamada de função dentro do switch. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Tayousa Postado Abril 16, 2015 Autor Denunciar Share Postado Abril 16, 2015 (editado) Okay valeu, era só remover os void's do antes da variável. :D Editado Abril 16, 2015 por Tayousa Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Tayousa Postado Abril 19, 2015 Autor Denunciar Share Postado Abril 19, 2015 Ajuda, não estou conseguindo fazer o "if" das void's funcionar... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Tayousa Postado Abril 19, 2015 Autor Denunciar Share Postado Abril 19, 2015 <script type='text/javascript'>window.mod_pagespeed_start = Number(new Date());</script> Ajuda, não estou conseguindo fazer o "if" das void's funcionar deste mesmo programa... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 LazaroBinda Postado Abril 19, 2015 Denunciar Share Postado Abril 19, 2015 Dá uma lida sobre o armazenamento do buffer no C e como funciona a função fflush( ). printf("Deseja voltar ao menu? (s/n)"); scanf("%c", &opc); getchar(); if (opc=='s') { menu(); }else{ denter(); printf("Obrigado! "); } Acontece que quando seu programa chega na leitura de opc, já existe alguma coisa no buffer. Por isso ele passa direto no scanf sem receber nenhum valor. O pior é que a função getchar() logo em seguida faz o programa esperar uma entrada criando a falsa ilusão de que você está informando o valor de opc. Em primeiro lugar, você não precisa desse getchar( ) aí, ele tá perdido no código. E em segundo lugar, você pode limpar o buffer. Existem duas formas de fazer isso. A Primeira: printf("Deseja voltar ao menu? (s/n)"); scanf(" %c", &opc); //getchar(); if (opc=='s') { menu(); }else{ denter(); printf("Obrigado! "); } Seria basicamente colocar um espaço antes do argumento de scanf( ). Isso vai fazer que o programa ignore o que estiver no buffer pra então ler o valor de char. A segunda e preferida: printf("Deseja voltar ao menu? (s/n)"); fflush(stdin); //Caso esteja no Windows //__fpurge(stdin); //Caso esteja no Linux scanf("%c", &opc); //getchar(); if (opc=='s') { menu(); }else{ denter(); printf("Obrigado! "); } Seria utilizar a função fflush no windows ou __fpurge no linux pra limpar o buffer antes de utilizar o scanf. Outra coisa. Já que você repete esse bloco aí várias vezes, seria preferível você transformar isso aí em uma função. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Tayousa
Não entendo porque o switch deste programa não está funcionando, quando escolho a opção entra no system ("pause");
Editado por TayousaLink para o comentário
Compartilhar em outros sites
5 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.