Помогите решить задачу на switch, case;

Здравствуйте, сразу извиняюсь за глупый вопрос ибо для вас эта задачка может показаться совсем пустяковой, однако я в программировании новичок и «C»я начал изучать недавно.
Так вот,задачу надо решить с использованием switch, case; Как работает switch, case я в принципе понимаю, но вот с этой задачей целая проблема,уже 2 день думаю.
Задача:
Локатор ориентирован на одну из сторон света («С» – север, «З» – запад, «Ю» – юг, «В» – восток) и может принимать одну из трех цифровых команд: -1 – поворот налево, 1 – поворот направо, 2 – поворот на 180 градусов. Дан символ C – исходная ориентация локатора и число N – посланная ему команда. Вывести ориентацию локатора после выполнения команды.

Нууу, насколько я понял switch,case здесь для того чтобы при в введении одной из команд (1,-1,2) в зависимости от исходного положения локатора выдавало текущее положение локатора, как никак «case» оператор выбора.

Ну вот получилось что-то вроде этого правда не могу понять что с else не так.

#include <stdio.h>
#include <locale.h>

int main()
{
    int x;
    char z,s,j,w,c;

    setlocale(LC_ALL, "rus");
    printf("Введите исходную ориентацию локатора: ");
    scanf("%c", &c);
    printf("Введите команду: ");
    scanf("%d", &x);

    if ((c==z)&&(c==s)&&(c==j)&&(c==w))
    {
            if (c==z);
            {
                switch (x)
            {
            case 1:
                printf("Ориентация локатора: Север");
                break;
            case -1:
                printf("Ориентация локатора: Юг");
                break;
            case 2:
                printf("Ориентация локатора: Восток");
                break;
            default:
                printf("Вы ввели неверную команду");
            }
        }
        if (c==s);
        {
            switch (x)
            {
            case 1:
                printf("Ориентация локатора: Восток");
                break;
            case -1:
                printf("Ориентация локатора: Запад");
                break;
            case 2:
                printf("Ориентация локатора: Юг");
                break;
            default:
                printf("Вы ввели неверную команду");
            }
        }
        if (c==j);
        {
           switch (x)
            {
            case 1:
                printf("Ориентация локатора: Запад");
                break;
            case -1:
                printf("Ориентация локатора: Восток");
                break;
            case 2:
                printf("Ориентация локатора: Север");
                break;
            default:
                printf("Вы ввели неверную команду");
            }
        }
        if (c==w);
        {
           switch (x)
            {
            case 1:
                printf("Ориентация локатора: ЮГ");
                break;
            case -1:
                printf("Ориентация локатора: Север");
                break;
            case 2:
                printf("Ориентация локатора: Запад");
                break;
            default:
                printf("Вы ввели неверную команду");
            }
            else printf("Вы ввели неверно исходное положение");
        }
    getch();
    }
    return 0;
}

Ну да, switch-case здесь как пятое колесо у телеги. Вот компактненький вариант:

#include <iostream>

using namespace std;

int main() {
    setlocale(LC_ALL, "Russian");
    const char *directions[] = { "Север", "Восток", "Юг", "Запад" };
    const int ndirs = sizeof(directions) / sizeof(char *);

    int dir = 0;
    int command;

    do {
        cout << "Направление локатора " << directions[dir] << endl;
        cout << "команда: ";
        cin >> command;
        if (command != 0) {
            dir += command % ndirs;
            dir %= ndirs;
            if (dir < 0)
                dir = ndirs + dir;
        }
    } while (command != 0);
    return 0;
}

Крутит локатор и вправо и влево на любое количество шагов. По команде 0 завершает работу.

Если в массив directions корректно добавить промежуточные положения типа «Северо-Восток» или даже «Восток-Северо-Восток», то будет крутить не по 1/4 оборота, а по 1/8 или, соответственно, по 1/16 оборота за шаг. (Понятно, что при этом команда 2 — это уже будет совсем не 180 градусов.)

Можно, конечно, вместо массива с названиями сторон света и выбора по индексу написать что-то типа

cout << "Направление локатора ";
switch (dir) {
    case 0: cout << "Север"; break;
    case 1: cout << "Восток"; break;
    case 2: cout << "Юг"; break;
    case 3: cout << "Запад"; break;
    default: cout << "идите в жопу";
}
cout << endl;

Но ведь говнокод же :\

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

Ответить

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

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

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

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

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

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