Tayousa Posted April 15, 2015 Report Share Posted April 15, 2015 (edited) 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! "); } } Edited April 15, 2015 by Tayousa Quote Link to comment Share on other sites More sharing options...
0 LazaroBinda Posted April 16, 2015 Report Share Posted April 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. Quote Link to comment Share on other sites More sharing options...
0 Tayousa Posted April 16, 2015 Author Report Share Posted April 16, 2015 (edited) Okay valeu, era só remover os void's do antes da variável. :D Edited April 16, 2015 by Tayousa Quote Link to comment Share on other sites More sharing options...
0 Tayousa Posted April 19, 2015 Author Report Share Posted April 19, 2015 Ajuda, não estou conseguindo fazer o "if" das void's funcionar... Quote Link to comment Share on other sites More sharing options...
0 Tayousa Posted April 19, 2015 Author Report Share Posted April 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... Quote Link to comment Share on other sites More sharing options...
0 LazaroBinda Posted April 19, 2015 Report Share Posted April 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. Quote Link to comment Share on other sites More sharing options...
Question
Tayousa
Não entendo porque o switch deste programa não está funcionando, quando escolho a opção entra no system ("pause");
Edited by TayousaLink to comment
Share on other sites
5 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.