Я изучаю 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);
}
хорошо, секундочку, приятель
вот оно, надеюсь теперь понятнее
«У меня проблемы» и «У меня ничего не получилось» — это не описание проблемы. Что именно происходит? Почему это неправильно? Что должно произойти вместо этого? Показать пример ввода, желаемый вывод и текущий вывод; и цитируйте любые полученные ошибки полностью.
Совет: пожалуйста, начните использовать средство форматирования: clang-format, это поможет вам поддерживать чистоту кода и ясность ума.
@tomas просит продолжения всей программы после окончания каждого случая означает, что нужно запустить «всю» программу, затем запросить продолжение и затем действовать соответственно. Это было описано в моем ответе ниже. И как, по-вашему, помогает ваша функция «continuando», особенно если за ней следует «возврат 0»?
ну, я не знаю @ErdalKüçük, как я уже сказал, я все еще учусь, и у меня нет большого опыта :/
@tomas я отредактировал свой ответ ниже, может быть, теперь немного яснее, что я имею в виду
"в конце каждого случая мне нужно спросить пользователя, хочет ли он повторить всю программу"
Так почему бы не упаковать вашу «программу» в цикл?
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». Последний завершает вашу «всю» программу.
хорошо, я попробую это
и как мне настроить его на повторение в конце каждого случая, например, если я прохожу случай 1, и он спрашивает пользователя, хочет ли он повторить, если да, он возвращается, спрашивая, какой вариант пользователь хочет из этих 5 у меня есть
какова ваша функция "рутина"?
Это ваши процедуры (функции), основанные на вариантах, а именно: 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
Вы можете просто использовать простой оператор if и запустить цикл с логическим значением. Поэтому, если пользователь не хочет продолжать цикл, вы просто устанавливаете значение boll в false, и цикл не будет продолжаться. Если пользователь ответит «да», значение bool останется истинным.
редактировать: делай так
сначала поместите весь оператор switch
в цикл while
, а перед этим создайте новую переменную bool
run
и установите для нее значение 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; }
это должно работать!
Как мне это сделать? у вас есть пример, чтобы помочь мне визуализировать идею?
я отредактировал свой ответ
здорово, спасибо, попробую
спасибо, это сработало, но мне пришлось добавить еще один сканф, и теперь он работает на 100% :)
Re: я пытался использовать функции и выполнять циклы while, но у меня не было успеха, тогда покажите нам эти попытки, чтобы мы могли указать, где ваша ошибка.