如何在 c 中的每个 "case" 语句末尾重复该程序?

How can I repeat the program at the end of each "case" statement in c?

我正在学习 C,我有这个项目,我必须在其中使用数组和东西。

在每个 case 结束时,我需要询问用户是否要重复整个程序,这就是我苦苦挣扎的地方。

我尝试过使用函数和 do while 循环,但没有用。

我现在的代码是:

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

main() {
  setlocale(LC_ALL, "Portuguese");
  int i, opcao, vetor1[10], vetor2[10], vetor3[10], d, e, f, con4;
  float soma = 0.0, soma2, media, media2;

  printf("Digite um valor de 1 a 5:\n1-Media de valores\n2- Reverter vetor\n3- "
         "Separar os pares dos impares\n4- Subtração e o seu quadrado\n5- "
         "Novos valores e media \n");

  scanf("%d", &opcao);

  switch (opcao) {
  case 1:

    printf("Introduza 10 numeros ente 1 e 100\n");

    for (i = 0; i < 10; i++) {
      do {
        printf("Insira o digito nº%d: ", i + 1);
        scanf("%d", &vetor1[i]);
        soma += vetor1[i];
      } while (vetor1[i] < 1 || vetor1[i] > 100);
    }

    media = soma / 10;
    printf("Media = %.2f", media);

    return 0;

    break;

  case 2:

    printf("sum code");

    break;

  case 3:

    printf("sum code");

    break;

  case 4:

    printf("sum code");

    break;

  case 5:

    printf("sum code");

    break;


我的代码试图使用函数:

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

void continuando() // função que pergunta se o usuário que continuar o programa.
{
  char continuar;

  printf("\n\nwanna continua?");
  printf("\nif yes (s) if no (n)");
  scanf("%c", &continuar);
  scanf("%c", &continuar);

  switch (continuar) {
  case 's': {
    system("CLS"); // usado para limpar o ecrã.
    break;
  }

  case 'n': {
    printf("\nfinished program.");
    exit(0); // a função exit(0) é usada para terminar o programa.
    break;
  }
  default: {
    printf("Option invalid.");
    break;
  }
  }
}

main() {
  setlocale(LC_ALL, "Portuguese");

  int i, opcao, vetor1[10], vetor2[10], vetor3[10], d, e, f, con4;
  int media4, media5, media6, media7, media8, media9, media10, media11, media12,
      media13;
  float soma = 0.0, soma2, media, media2;

  printf("insert 20 nums\n");

  for (i = 0; i < 10; i++) {
    do {
      printf("Insira o digito nº%d: ", i + 1);
      scanf("%d", &vetor1[i]);
      soma += vetor1[i];
    } while (vetor1[i] < 1 || vetor1[i] > 100);
  }

  printf("Digite um valor de 1 a 5:\n1-Media de valores\n2- Reverter vetor\n3- "
         "Separar os pares dos impares\n4- Subtração e o seu quadrado\n5- "
         "Novos valores e media \n");

  scanf("%d", &opcao);

  do {

    switch (opcao) // opcao = option in eng
    {
    case 1:

      media = soma / 10;
      printf("average = %.2f", media);

      continuando();

      return 0;

      break;

    case 2:

      printf("sum code");

      break;

    case 0:
      printf("program finished");
      return 0;

      break;

    default:
      printf("invalid value!\n");
    }

  } while (opcao = !0);
}

“在每个案例结束时,我需要询问用户是否要重复整个程序”

那为什么不把你的 'program' 打包成一个循环呢?

int main()
{
    bool active = true;

    do {

        //ask for routine/subprogram/functionality [1..N]
        switch (input) {
            case 1: runRoutine1(); break;
            case 2: runRoutine2(); break;
            //... for all the other
        }

        //ask for continuation [y|n]
        switch (input) {
            case 'n': active = false; break;
        }

    } while (active);

    return 0;
}

注:使用'break'代替'return 0'。后者会终止您的 'whole' 程序。

您可以只使用一个简单的 if 语句并让循环 运行 带有一个 bool 值。因此,如果用户不想继续循环,您只需将 boll 值设置为 false,循环将不会继续,如果用户回答是,bool 值将保持为真。

编辑: 喜欢这样

首先将整个 switch 语句放入 while 循环中,然后再创建一个新的 bool 变量 run 并将其设置为 true。您还需要一个名为 ans.

的新 char 变量
while(run) { ... case statements}

然后你在 case 语句中的每个 break; 之前问这个问题。

printf("\nDo you want to repeat the program?(y/n)";
scanf("%c", &ans);
if(ans == 'y') { run = true; }
if(ans == 'n') { run = false; }

应该可以!