Сделайте что-нибудь, если все критерии верны - PullRequest
0 голосов
/ 11 мая 2018

В моем исследовании я должен запрограммировать систему, которая получает структуру квартир, которая содержит: код квартиры, цену, количество комнат и т. Д.

В другой части системы, когда список квартир включаетКвартиры, я должен построить функцию, которая распечатывает, чтобы просмотреть все квартиры, которые отвечают всем требованиям пользователя.например, для этой команды от пользователя: «PRINT maxRooms 5 Price 20000» функция отсканирует Список квартир и напечатает только те квартиры, которые имеют максимум 5 комнат и их цена меньше 20000.

I 'я инициализирую эти локальные переменные в -1, и теперь я нахожусь в стадии, когда моя локальная переменная отличается от -1, пользователь запрашивает этот фильтр.Для простоты предположим, что у нас есть только три критерия: цена, максимальное количество номеров, минимальное количество номеров.

Я пытаюсь избежать этой ситуации:

#define UNDEFINED_FILLTER -1
while (currentAprt != NULL)
        {
            if (maxPrice == UNDEFINED_FILLTER)
            {
                if (MinimumNumOfRooms == UNDEFINED_FILLTER)
                {
                    if (MaximumNumOfRooms == UNDEFINED_FILLTER)
                    {
                        if (1 /*dateofevcation  == undefined*/)
                        {
                            printf("Apartment code: %d\nApartment address: %s\n Apartment price: %d\n", currentAprt->code,currentAprt->address,currentAprt->price);
                            printf("Number of rooms: %d\nPossible entry date: %s\nAdding date: %s",currentAprt->numOfRooms,currentAprt->enteryDate,currentAprt->addingDate);
                        }
                        else
                        {
                            //check date of evacuation criteria
                        }
                    }
                    else
                    {
                        //check maximum number of rooms and date of evacuation criteria
                    }
                }
                else
                {
                    //check minimum number of rooms, maximum number of rooms and date of evacuation criteria
                }
            }
            else
            {
                //check max price, minimum number of rooms, maximum number of rooms and date of evacuation criteria
            }
            currentAprt = currentAprt->next;
        }

МОЙ ВОПРОС: Есть ли какой-нибудь простой способ проверить, написал ли пользователь команду с критериями, проверить ее и перейти к следующим критериям?или единственный способ написать это с помощью операторов if-else?

1 Ответ

0 голосов
/ 11 мая 2018

Я считаю, что многие сложные деревья if-then можно значительно упростить с помощью раннего возврата / раннего продолжения:

#define UNDEFINED_FILLTER -1

void loop_over_rooms() {
    for (; currentAprt != NULL; currentAprt = currentAprt->next) {
        if (maxPrice == UNDEFINED_FILLTER) { continue; }
        if (MinimumNumOfRooms == UNDEFINED_FILLTER) { continue; }
        if (MaximumNumOfRooms == UNDEFINED_FILLTER) { continue; }

        // At this point, we know fields are filled 
        printf(...);             
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...