When I run the commands on Switch Case, does it end instead of going back to Menu?

Asked

Viewed 302 times

-2

int main(){
    int tensao, corrente, resistencia, potencia, tempo, cargaeletrica, trabalho, i;

    printf("\nPara calculo de Tensao(resistencia*corrente) digite 1\n\nPara calculo de Potencia(tensao*corrente) digite 2\n\nPara calculo de Corrente(carga eletrica/tempo) digite 3\n\nPara calculo de Tensao de outra Maneira(trabalho/carga eletrica) digite 4\n\nPara calculo de Potencia de Outra Maneira(resistencia*corrente^2) digite 5\n\nPara calculo de Potencia de Outra Maneira(tensao^2/resistencia) digite 6\n\nDigite 7 para sair do Menu!\n\n");
    scanf("%d", &i);

    switch (i){
    case 1:
        printf("Determine o valor de Corrente: ");
        scanf("%d", &corrente);
        printf("Determine o valor de Resistencia: ");
        scanf("%d", &resistencia);
        tensao = resistencia*corrente;
        printf("Valor da Tensao: %d", tensao);
    break;

    case 2:
        printf("Determine o valor de Tensao: ");
        scanf("%d", &tensao);
        printf("Determine o valor de Corrente: ");
        scanf("%d", &corrente);
        potencia = tensao*corrente;
        printf("Valor da Potencia: %d", potencia);
    break;

    case 3:
        printf("Determine o valor de Carga Eletrica: ");
        scanf("%d", &cargaeletrica);
        printf("Determine o valor de Tempo: ");
        scanf("%d", &tempo);
        corrente = cargaeletrica/tempo;
        printf("Valor da Corrente: %d", corrente);
    break;

    case 4:
        printf("Determine o valor de Trabalho: ");
        scanf("%d", &trabalho);
        printf("Determine o valor de Carga Eletrica: ");
        scanf("%d", &cargaeletrica);
        tensao = trabalho/cargaeletrica;
        printf("Valor da Tensao: %d", tensao);
    break;

    case 5:
        printf("Determine o valor de Resistencia: ");
        scanf("%d", &resistencia);
        printf("Determine o valor de Corrente: ");
        scanf("%d", &corrente);
        potencia = resistencia*pow(corrente,2);
        printf("Valor da Potencia: %d", potencia);
    break;

    case 6:
        printf("Determine o valor de Tensao: ");
        scanf("%d", &tensao);
        printf("Determine o valor de Resistencia: ");
        scanf("%d", &resistencia);
        potencia = pow(tensao,2)/resistencia;
        printf("Valor da Potencia: %d", potencia);
    break;

    default:
        printf("Valor Invalido!");

    case 7:
        break;
    }
return 0;
}
  • Why wouldn’t it close? How would the program return to the menu?

  • you have to use a repeat loop as exemplified below by @Rogi93

2 answers

1

To prevent the programme from closing, one of the alternatives is to use the repeating structure while with a condition referring to the option to leave while(i != 7). To prevent the prompt from getting crowded with information at each loop, the function system("cls")can be used to clean the screen at each loop, generating a more pleasant effect.

#include <stdio.h>
#include <math.h>
#include <stdlib.h>

int main(){

int tensao; 
int corrente;
int resistencia; 
int potencia; 
int tempo; 
int cargaeletrica; 
int trabalho; 
int i = 0;


while(i != 7){

    system("cls");
    printf("\nPara calculo de Tensao(resistencia*corrente) digite 1\n\nPara calculo de Potencia(tensao*corrente) digite 2"
           "\n\nPara calculo de Corrente(carga eletrica/tempo) digite 3"
           "\n\nPara calculo de Tensao de outra Maneira(trabalho/carga eletrica) digite 4"
           "\n\nPara calculo de Potencia de Outra Maneira(resistencia*corrente^2) digite 5"
           "\n\nPara calculo de Potencia de Outra Maneira(tensao^2/resistencia) digite 6"
           "\n\nDigite 7 para sair do Menu!\n\n"
           "Opcao desejada:");
    scanf("%d", &i);

    switch (i){
        case 1:
            printf("Determine o valor de Corrente: ");
            scanf("%d", &corrente);
            printf("Determine o valor de Resistencia: ");
            scanf("%d", &resistencia);
            tensao = resistencia*corrente;
            printf("Valor da Tensao: %d\n", tensao);
            system("PAUSE");
            break;

        case 2:
            printf("Determine o valor de Tensao: ");
            scanf("%d", &tensao);
            printf("Determine o valor de Corrente: ");
            scanf("%d", &corrente);
            potencia = tensao*corrente;
            printf("Valor da Potencia: %d\n", potencia);
            system("PAUSE");
            break;

        case 3:
            printf("Determine o valor de Carga Eletrica: ");
            scanf("%d", &cargaeletrica);
            printf("Determine o valor de Tempo: ");
            scanf("%d", &tempo);
            corrente = cargaeletrica/tempo;
            printf("Valor da Corrente: %d\n", corrente);
            system("PAUSE");
            break;

        case 4:
            printf("Determine o valor de Trabalho: ");
            scanf("%d", &trabalho);
            printf("Determine o valor de Carga Eletrica: ");
            scanf("%d", &cargaeletrica);
            tensao = trabalho/cargaeletrica;
            printf("Valor da Tensao: %d\n", tensao);
            system("PAUSE");
            break;

        case 5:
            printf("Determine o valor de Resistencia: ");
            scanf("%d", &resistencia);
            printf("Determine o valor de Corrente: ");
            scanf("%d", &corrente);
            potencia = resistencia*pow(corrente,2);
            printf("Valor da Potencia: %d\n", potencia);
            system("PAUSE");
            break;

        case 6:
            printf("Determine o valor de Tensao: ");
            scanf("%d", &tensao);
            printf("Determine o valor de Resistencia: ");
            scanf("%d", &resistencia);
            potencia = pow(tensao,2)/resistencia;
            printf("Valor da Potencia: %d\n", potencia);
            system("PAUSE");
            break;

        case 7:
            break;

        default:
            printf("Valor Invalido!\n");
            system("PAUSE");

      }

 }
 return 0;
}

-2

To return to the menu would need a cycle or even use the function drop, when using a cycle had to put off the switch And it’s only when I press key seven that I’m out of that cycle. The break makes him come out of the whole switch{} and so ends the program.

I leave reference to the break

For example:

/*(...)*/
while(1)
{
  printf("\nPara calculo de Tensao(resistencia*corrente) digite 1\n\nPara calculo de Potencia(tensao*corrente) digite 2\n\nPara calculo de Corrente(carga eletrica/tempo) digite 3\n\nPara calculo de Tensao de outra Maneira(trabalho/carga eletrica) digite 4\n\nPara calculo de Potencia de Outra Maneira(resistencia*corrente^2) digite 5\n\nPara calculo de Potencia de Outra Maneira(tensao^2/resistencia) digite 6\n\nDigite 7 para sair do Menu!\n\n");
  scanf("%d", &i);
  switch(i){
  /*(...)*/
   case 7:
    break;
   default:
    printf("Valor Invalido!");
    break;
  }
if(i==7)
  break;
//limpar tela
}

To look more beautiful, should clean, can use many functions to make this clean, I refer to Stackoverflowen.

Using the function goto

 int main(){
  /*(...)*/
 ciclo:
  //limpar tela
  printf("\nPara calculo de Tensao(resistencia*corrente) digite 1\n\nPara calculo de Potencia(tensao*corrente) digite 2\n\nPara calculo de Corrente(carga eletrica/tempo) digite 3\n\nPara calculo de Tensao de outra Maneira(trabalho/carga eletrica) digite 4\n\nPara calculo de Potencia de Outra Maneira(resistencia*corrente^2) digite 5\n\nPara calculo de Potencia de Outra Maneira(tensao^2/resistencia) digite 6\n\nDigite 7 para sair do Menu!\n\n");
  scanf("%d", &i);
  switch(i){
  /*(...)*/
   case 7:
    goto fim;
   default:
    printf("Valor Invalido!");
    break;
  }
goto ciclo;

fim:
return 0;
}

How to use switch in C?

  • 2

    Why not a do{ (...) }while( i != 7); ?

  • Yes, it could also be clear, I usually program more this way and I think having an extra variable to break is more intuitive, I don’t know, my preference

  • Since you declare the variable extra out of cycle while doesn’t make much sense if(val==1) break; and use while(1). You’re wasting a needless comparison, and I don’t think you’re intuiting it anymore. BTW was not I who gave denies, I’m just trying to help.But the question well deserved a denial -.-'

  • Yes I know, I usually use these variables to then be easier in debug, I can edit. Deserved a denial why? There is always the option to make your answer too.

  • When I said "deny" I meant the question and not your answer.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.