Как зациклить?

Рейтинг: 0Ответов: 2Опубликовано: 01.10.2014

Всем доброго времени суток! Не могу понять, как сделать так, чтобы при вопросе "Корзина пуста?", вводя ответ 2, перекидывало на начало кода, т.е. "Шарик чёрный или белый?".
Заранее спасибо за ответы!

#include <iostream>
#include <conio.h>
#include <locale>

using namespace std;

main()
{
      setlocale(LC_ALL,"Russian");
      int wapuk,answer;
      cout<<"Шарик чёрный или белый?: ";
      cin>>wapuk;
      if(wapuk==1)
            cout<<"Положить шарик в корзину для чёрных.";
      else
      {
          if(wapuk==2)
                cout<<"Положить шарик в корзину для белых.";
      }  
      cout<<"\nКорзина пуста??: ";
      cin>>answer;
      if (answer==1)
                    cout<<"Корзина пуста. Работа закончена! :)";
      Else
      {
          If (answer==2) // Вернуться в начало кода
          {

                    }
      }
getch();
}

Ответы

▲ 4Принят

Во-первых, тег у Вас стоит C, а пишите на C++ (кроме conio.h, кстати, от нее тоже надо избавиться).

Во-вторых, замените if ... else на switch ... case - будет читабельнее.

Теперь по сути вопроса: чтобы зациклить, нужен цикл (неожиданно, правда?). Но нам нужен не обычный, а бесконечный. Чтобы цикл был бесконечный, его условие, очевидно, должно быть всегда истинно. Мы возьмем while(1). Итого получаем:

while (1)
{
    printf("Шарик чёрный или белый? ");
    scanf("%d", &wapuk);
    switch (wapuk)
    {
        case 1:
            printf("Положить шарик в корзину для чёрных\n");
            break;
        case 2:
            printf("Положить шарик в корзину для белых\n");
        default:
            printf("Введите 1 или 2");
            continue; // Переходим к началу цикла
    }
    printf("Корзина пуста? ");
    scanf("%d", &answer);
    switch (answer)
    {
        case 1:
            printf("Корзина пуста. Работа закончена!");
            return 0; // Выходим
        case 2:
            continue;
        default:
            printf("Введите 1 или 2"); // Пользователь ввел не то, что нам нужно, поэтому начинаем заново. Хотя можно и еще в один бесконечный цикл обернуть, чтобы корректный answer получить.
            continue;
    }
}
▲ 4

Я долго пытался сообразить, что такое "вапук"? Охосспадя, это шарик! Я бы за одно только это выгнал Вас из института или школы. Что касается собственно кода, то я бы написал как-то так:

#include <stdio.h>

const char* const balls[] = {
    "black",
    "white"
};

const char* const baskets[] = {
    "empty",
    "full"
};

int
input_number(const char* const str, const int min, const int max)
{
    int n;
    do {
        puts(str);
        scanf("%d", &n);
    } while( n < min || n > max );
    return n;
}

int
main(void)
{
    int n;
    do {
        n = input_number("Black or white? (1/2)", 1, 2);
        printf("Put the ball in the basket for %s balls.\n", balls[--n]);
        n = input_number("Basket is empty or full? (1/2)", 1, 2);
        printf("Basket is %s\n", baskets[--n]);
    } while( n != 0 );
    return 0;
}