Как сделать повтор прохода по кейсам?

#include <iostream>
#include <stdio.h>
#include <conio.h>
int main()
{
    int a;
    printf("Vvedite chislo\ne");
    scanf("%i",&a);
    switch(a)
    {
        case 0:printf("nol'");break;
        case 1:printf("odin");break;
        case 2:printf("dva");break;
        case 3:printf("tri");break;
        case 4:printf("chetire");break;
        case 5:printf("pyat'");break;
        case 6:printf("shest'");break;
        case 7:printf("sem'");break;
        case 8:printf("vosem'");break;
        case 9:printf("devyat'");break;
        default:printf("Vvedite chislo ot 0 do 9 :)");
    }

}

Сделать так, чтобы когда вводится любое число кроме 0-9,выводило «Введите число от 0 до 9» и свич снова проверял бы.

#include <iostream>

int a;
using namespace std;
int function()
{
    scanf("%i",&a);
}
int main()
{
    cout << "Введите число: ";
    function();
    switch(a)
    {
        case 0:
        {
             cout << "Вы ввели нуль! " << endl;
             cout << "Введите опять число: ";
                  function();
                   switch(a)
                   {
                            case 0:
                                 {
                                      cout << "Вы ввели опять нуль! " << endl;
                                      break;
                                 }
                            case 1:
                                 {
                                      cout << "А теперь вы ввели один! " << endl;
                                      break;
                                 }
                            default:
                                    cout << "Ранее вы ввели нуль но теперь ввели неверное число! " << endl;
                                    break;
                   }

             break;
        }
        case 1:
        {
             cout << "Вы ввели один! " << endl;
             cout << "Введите опять число: ";
                  function();
                   switch(a)
                   {
                            case 0:
                                 {
                                      cout << "А теперь вы ввели нуль! " << endl;
                                      break;
                                 }
                            case 1:
                                 {
                                      cout << "Вы ввели опять один! " << endl;
                                      break;
                                 }
                            default:
                                    cout << "Ранее вы ввели один но теперь ввели неверное число! " << endl;
                                    break;
                   }

             break;
        }

        default:
                cout << "Неверный ввод чисел! " << endl;
    }

system("pause");
return 0;
}
#include <iostream>
using namespace std;

    int a;
void num()
{
    cout <<"Vvedite chislo:\n";
    cin >>a;
    switch(a)
    {
        case 0:cout<<"nol";break;
        case 1:cout<<"odin";break;
        case 2:cout<<"dva";break;
        case 3:cout<<"tri";break;
        case 4:cout<<"chetire";break;
        case 5:cout<<"pyat'";break;
        case 6:cout<<"shest'";break;
        case 7:cout<<"sem'";break;
        case 8:cout<<"vosem'";break;
        case 9:cout<<"devyat'";break;
        default:cout<<"Vvedite chislo ot 0 do 9 :)\n";num();
        }
}
int main()
{
    num();
    system ("pause>nul");
}

Ers, это круто: рекурсия на пустом месте! )))))

2Васька
Не проще написать что-то типа:

int main()
{
    int a;
    do {
        printf("Vvedite chislo ot 0 do 9: ");
        scanf("%i",&a);
        if (a < 0 || a > 9) {
            printf("Nepravilnoe chislo!\n");
        }
    } while (a < 0 || a > 9);
    switch(a)
    {
        case 0:printf("nol'");break;
        case 1:printf("odin");break;
        case 2:printf("dva");break;
        case 3:printf("tri");break;
        case 4:printf("chetire");break;
        case 5:printf("pyat'");break;
        case 6:printf("shest'");break;
        case 7:printf("sem'");break;
        case 8:printf("vosem'");break;
        case 9:printf("devyat'");break;
    }

}

Хотя можно, конечно, свич и в цикле гонять, только это не эффективно:

int main()
{
    int a;
    do {
        printf("Vvedite chislo ot 0 do 9: ");
        scanf("%i",&a);
        switch(a)
        {
            case 0:printf("nol'");break;
            case 1:printf("odin");break;
            case 2:printf("dva");break;
            case 3:printf("tri");break;
            case 4:printf("chetire");break;
            case 5:printf("pyat'");break;
            case 6:printf("shest'");break;
            case 7:printf("sem'");break;
            case 8:printf("vosem'");break;
            case 9:printf("devyat'");break;
            default: printf("Nepravilnoe chislo!\n");
        }
    } while (a < 0 || a > 9);
}

Череп, Почему бы и не рекурсию? Тот же цикл, та же операция, тот же алгоритм.

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

Каждый инструмент предназначен для своей цели. Для циклов — есть операторы цикла. Рекурсия уместна и логична в других случаях, например при обходе дерева.

Кроме того, в твоём решении есть ещё одно маленькое «нехорошо»: использование глобальной переменной и, следовательно, использование функции с побочным эффектом. Этого надо всемерно избегать.

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

Ответить

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

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

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

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

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

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