Как я говорю CPAN.pm устанавливать все модули в определенном каталоге?

У вас нет позиции, в которой первое наименьшее значение становится вторым наименьшим значением, которое не может работать.

Рассмотрим этот код:

int value;
int smallest = std::numeric_limits<int>::max()-1;
int second_smallest = std::numeric_limits<int>::max();

while(true)
{
    cin >> value;

    if(value == 0) break;
    if(value >= second_smallest) continue;
    if(value == smallest) continue; // assuming that a double value does not change anything

    if(value > smallest) // is between them
    {
        second_smallest = value;
        continue;
    }

    //now the case left is that the new value is the smallest
    second_smallest = smallest;
    smallest = value;
}

Основная идея: прежде всего, исключить вещи и с тех пор предположить, что они не выполняются. Мы начинаем со случая разрыва (я предпочитаю, чтобы в таких случаях while(true) было ручное управление взломом его внутри). Тогда мы исключаем случай, когда ничего не происходит. Осталось два случая: мы находимся между старыми значениями и ниже обоих, и мы обрабатываем их соответствующим образом.

В вашем коде ваши if-ы становятся раздутыми. Трудно отследить, что сделано и что должно быть сделано .

Одним из примеров этого является то, что у вас есть несколько раз && value != 0 в вашем коде, несмотря на то, что это всегда верно из-за состояния вашего while.

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

Другие мелочи: вы должны выбрать стиль и придерживаться его. Весьма необычно называть переменные с большой первой буквой. Дело верблюда в порядке, хотя, smallestNumber было бы хорошо. Во-вторых, старайтесь избегать using namespace std;. Это может привести к столкновениям. Скорее используйте одиночные члены std, как using std::cout;. Это не так проблематично в исходном файле (очень проблематично в заголовке), но я рекомендую делать это последовательно, чтобы сохранить хорошую рутину.

Что осталось сделать в коде, так это потом перехватить, если переменные все еще находятся в std::numeric_limits<int>::max() и минус единица, сигнализируя об отсутствии пользовательского ввода, и напечатать подходящее сообщение вместо этих значений. [1116 ]

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

if(value < 0)
{
    cout << "Value was ignored due to being negative" << endl;
}
8
задан brian d foy 25 April 2009 в 17:58
поделиться

2 ответа

Установите local :: lib . Он будет обрабатывать все настройки для вас.

14
ответ дан 5 December 2019 в 12:12
поделиться

Вы пытались использовать INSTALL_BASE для обоих? Вы должны установить несколько каталогов, потому что вы говорите CPAN.pm для установки в несколько каталогов. Скажите, чтобы все было установлено в одном месте:

makepl_arg         [INSTALL_BASE=~/perl]
mbuildpl_arg       [--install_base ~/perl]
0
ответ дан 5 December 2019 в 12:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: