Рекурсия без ошибок

Во время написания программ я часто сталкиваюсь с проблемой использования рекурсии. Не получается грамотно реализовать воспроизведение функции без ошибки. Рассмотрим следующую программу жирный текст switch. В программе я привел обычный пример самой проблемы. Дело в том, что при вводе случайного числа или символа, программа должна вывести сообщение « неверный ввод » что она в принципе и делает. Но так характерно для одного числа или символа, а вот если мы введем больше чисел и символов то увидим, что программа зацикливается и выводит то количество ошибок, сколько было введено чисел и символов. Вопрос: как реализовать в функции ее возврат исходного начала, без потери данных и затераний system(«cls»).

Пожалуйста, я прошу вас разобраться в этой задаче и помочь мне в ее решении.

#include <iostream>

char c;
using namespace std;
int function(int*a,int*b)
{
    cout << "Программа switch ";
    cout << "\n";
}
int main(int a,int b)
{
        function(&a,&b);
        cout << "Ввод: ";

        cin  >> c;

             switch(c)
             {
                      case '1':
                           {
                               cout << "Это первый кейс! " << endl;
                               break;
                           }
                      case '2':
                           {
                               cout << "Это второй кейс! " << endl;
                               break;
                           }
                           default:
                                   cout << "Неверный ввод! " << endl;
                                   main(a,b);
             }

system("pause");
return 0;
}

Проблема по прежнему актуальна и я не нашел решения. Вот скриншот прилагаю, где отчетливо видно что при вводе нескольких неверных букв, программа возвращает столько же неверных условий. Очень прошу помогите пожалуйста.

После каждого case не нужны фигурные скобки.

  switch(c)
  {
    case '1':
      cout << "Это первый кейс! " << endl;
      break;
   case '2':
      cout << "Это второй кейс! " << endl;
      break;
   default:
      cout << "Неверный ввод! " << endl;
      main(a,b);
  }

Спасибо Иван, снятие скобок после кейса не помогло решить проблему.

могу выдвинуть предположение. Вы вводите строку — в потоке cin стоит строка, и до тех пор пока она не разойдётся посимвольно в «char c», программа будет глотать поток cin и давать соответствующее сообщение.
Чтобы этого избежать, наверное можно ввести переменную строку для ввода, и уже её анализировать. Или может быть как-нибудь очистить поток cin, если конечно c++ позволяет это сделать.

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.