Как я могу повторить программу в конце каждого оператора «case» в 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);
}

Re: я пытался использовать функции и выполнять циклы while, но у меня не было успеха, тогда покажите нам эти попытки, чтобы мы могли указать, где ваша ошибка.

dbush 09.12.2020 16:10

хорошо, секундочку, приятель

tomas turbando 09.12.2020 16:12

вот оно, надеюсь теперь понятнее

tomas turbando 09.12.2020 16:22

«У меня проблемы» и «У меня ничего не получилось» — это не описание проблемы. Что именно происходит? Почему это неправильно? Что должно произойти вместо этого? Показать пример ввода, желаемый вывод и текущий вывод; и цитируйте любые полученные ошибки полностью.

underscore_d 09.12.2020 16:26

Совет: пожалуйста, начните использовать средство форматирования: clang-format, это поможет вам поддерживать чистоту кода и ясность ума.

Tarick Welling 09.12.2020 16:42

@tomas просит продолжения всей программы после окончания каждого случая означает, что нужно запустить «всю» программу, затем запросить продолжение и затем действовать соответственно. Это было описано в моем ответе ниже. И как, по-вашему, помогает ваша функция «continuando», особенно если за ней следует «возврат 0»?

Erdal Küçük 09.12.2020 16:51

ну, я не знаю @ErdalKüçük, как я уже сказал, я все еще учусь, и у меня нет большого опыта :/

tomas turbando 09.12.2020 16:56

@tomas я отредактировал свой ответ ниже, может быть, теперь немного яснее, что я имею в виду

Erdal Küçük 09.12.2020 17:07
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
8
114
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

"в конце каждого случая мне нужно спросить пользователя, хочет ли он повторить всю программу"

Так почему бы не упаковать вашу «программу» в цикл?

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». Последний завершает вашу «всю» программу.

хорошо, я попробую это

tomas turbando 09.12.2020 16:27

и как мне настроить его на повторение в конце каждого случая, например, если я прохожу случай 1, и он спрашивает пользователя, хочет ли он повторить, если да, он возвращается, спрашивая, какой вариант пользователь хочет из этих 5 у меня есть

tomas turbando 09.12.2020 16:43

какова ваша функция "рутина"?

tomas turbando 09.12.2020 17:28

Это ваши процедуры (функции), основанные на вариантах, а именно: 1: Media de valores, 2: Reverter vetor, 3: Separar os pares dos impares, 4: Subtração e o seu quadrado, 5: Novos valores e media

Erdal Küçük 09.12.2020 17:44
Ответ принят как подходящий

Вы можете просто использовать простой оператор if и запустить цикл с логическим значением. Поэтому, если пользователь не хочет продолжать цикл, вы просто устанавливаете значение boll в false, и цикл не будет продолжаться. Если пользователь ответит «да», значение bool останется истинным.

редактировать: делай так

сначала поместите весь оператор switch в цикл while, а перед этим создайте новую переменную boolrun и установите для нее значение true. Также вам нужна новая переменная char с именем ans.

while(run) { ... case statements}

а затем вы спрашиваете об этом перед каждым break; в утверждениях case.

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

это должно работать!

Как мне это сделать? у вас есть пример, чтобы помочь мне визуализировать идею?

tomas turbando 09.12.2020 16:50

я отредактировал свой ответ

In2Darknez 09.12.2020 17:00

здорово, спасибо, попробую

tomas turbando 09.12.2020 17:03

спасибо, это сработало, но мне пришлось добавить еще один сканф, и теперь он работает на 100% :)

tomas turbando 09.12.2020 18:12

Другие вопросы по теме