Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 2 из 3 ПерваяПервая 1 2 3 ПоследняяПоследняя
Показано с 11 по 20 из 27

Тема: nstrval

  1. #11
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Цитата Сообщение от KrutoyKrosch Посмотреть сообщение
    Если честно, то мне чот влом было переделать условие так, что бы оно 1 возвращало и работало правильно)0))

    Если немного соврать, а чем я хуже создателя strcmp?
    Тем, что возвращаемое значение в strcmp имеет смысл:
    0 if strings match each other on given length;
    1 o r -1 if some character do not match: string1[i] - string2[i] ('i' represents character index starting from 0);
    difference in number of characters if one string matches only part of another string.
    Цитата Сообщение от $continue$ Посмотреть сообщение
    Убейте меня, но я не могу жить без костылей.

    PHP код:
    #if !defined isnull
        #define isnull(%1) \
                    
    (((%1[0]) == 0) || ((%1[0]) == '\1') && ((%1[1]) == 0))
    #endif

    #if !defined NaN
        #define NaN floatsqroot(-1)
    #endif
    stock Floatfix__strval(const str[])
    {
        if(
    isnull(str))
            return 
    NaN;
        else if (
    str[0] >= '0' && str[0] <= '9' || strval(str) < 0)
            return 
    float(strval(str));
        else
            return 
    NaN;
    }
    #if    defined    _ALS_fix_strval
        #undef    strval
    #else
        #define    _ALS_fix_strval
    #endif
    #define strval fix__strval 
    Возвращаемые значение:
    NaN - пустая строка либо введены не цифры.
    Если число введено нормально - вернуть его.
    Минус данного подхода заключается в том, что всегда придётся использовать тег Float, иначе будут предупреждения и другие результаты.
    Последний раз редактировалось VVWVV; 17.01.2017 в 17:41.

  2. #12
    Аватар для KrutoyKrosch
    Пользователь

    Статус
    Оффлайн
    Регистрация
    26.02.2016
    Сообщений
    301
    Репутация:
    7 ±
    Цитата Сообщение от Nexius_Tailer Посмотреть сообщение
    strcmp может возвращать помимо нуля ещё как минимум 1 или -1. Такие значения указывают на конкретные различия, что-то вроде того, сколько символов в строках не совпало

    Вот вариант для ленивых, как сделать так, чтобы при успехе возвращало 1 и при неудаче 0:
    PHP код:
    stock nstrval(string[], &val)
    {
        
    val strval(string);
        return !(!
    val && string[0] != '0');

    точна, скобочки, совсем забыл что можно их использовать было

  3. #13
    Аватар для $continue$
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Я же сразу сказал, что это костыль, но он хотя бы логичный. Так как возвращает число, которое пользователь не введет. По свойству NaN не равняться не какому другому числу, даже самому себе. Есть лучше варианты? Возвращать число в диапазоне INT_MIN до INT_MAX - не лучшая идея. Все же их пользователь сможет вполне ввести. На счет тэга:
    PHP код:
    new integer floatround(strval(str)); 
    Только float использовать для сравнение, что функция выполнилась не удачна (введены буквы, строка пустая)

    Правда прописывать каждый раз округление не самый лучший способ, но что поделать.
    Цитата Сообщение от VVWVV Посмотреть сообщение
    Минус данного подхода заключается в том, что всегда придётся использовать тег Float, иначе будут предупреждения и другие результаты.
    P.S: автор сделай перехват нативки, хотя и изменение работы самой функции не лучшая практика в перехватах, но я думаю, что тут есть место быть перехватам.
    Последний раз редактировалось $continue$; 17.01.2017 в 18:10.
    Value your freedom or you will lose it, teaches history. "Don't bother us with politics," respond those who don't want to learn. (c) Richard Stallman

  4. #14
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Или так:
    PHP код:
    val || string[0] == '0'

  5. #15
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Цитата Сообщение от $continue$ Посмотреть сообщение
    P.S: автор сделай перехват нативки, хотя и изменение работы самой функции не лучшая практика в перехватах, но я думаю, что тут есть место быть перехватам.
    Очень плохая идея, так как изменяется логика функции.

  6. #16
    Аватар для KrutoyKrosch
    Пользователь

    Статус
    Оффлайн
    Регистрация
    26.02.2016
    Сообщений
    301
    Репутация:
    7 ±
    У меня же аргумент там дополнительный...

  7. #17
    Аватар для $continue$
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Я всего лишь предложил, НО перед этим предупредил, что это не самая лучшая идея и я считаю, что это, что то вроде исключения из правил. Как минимум в strval баг и это один из вариантов его пофиксить, то почему бы и нет?
    Цитата Сообщение от KrutoyKrosch Посмотреть сообщение
    У меня же аргумент там дополнительный...
    Value your freedom or you will lose it, teaches history. "Don't bother us with politics," respond those who don't want to learn. (c) Richard Stallman

  8. #18
    Аватар для KrutoyKrosch
    Пользователь

    Статус
    Оффлайн
    Регистрация
    26.02.2016
    Сообщений
    301
    Репутация:
    7 ±
    Ну харашо харашо

    Версия 0.2

    Изменения:

    Код:
    Мы пошли на отчаянный для нас шаг и переделали возвращаемые значение, теперь они возвращаю это:
    
    0 - функция не выполнилась (человекообразное существо обнаглело и решило обхитрить систему введя символы)
    1 - функция выполнилась, "тут я хотел пошутить, но думаю забанят"
    
    И самое главное изменение: теперь ленивым (на подобии меня) не надо будет прописывать везде nstrlen, компилятор это сделает за вас.
    PHP код:
    stock nstrval(string[], &val)
    {
        
    val strval(string);
        return !(!
    val && string[0] != '0');
    }
    #if defined _ALS_strval
        #undef strval
    #else
        #define _ALS_strval
    #endif
    #define strval nstrval 
    Последний раз редактировалось KrutoyKrosch; 17.01.2017 в 19:00.

  9. #19
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    А теперь читаем:
    Перехватчик не должен менять аргументы перехватываемой функции, её логику работы и предназначение.
    Изменение возвращаемых значений допускается только в том случае, если это не нарушает совместимости с оригинальной функцией.
    Например, в античите на HP перехватчик GetPlayerHealth возвращает не то значение, которое возвратит оригинальная функция, а кол-во HP игрока, хранящееся в античите. Но в то же время перехватчик должен возвращать именно HP, а не сумму HP и брони или ещё что-нибудь, что поменяет логику работы функции.
    То же самое относится к изменению аргументов функции. Если с помощью перехвата добавить в какую-либо функцию дополнительные параметры, а потом убрать перехватчик, то компилятор будет выдавать ошибки и код не будет компилироваться без перехватчика, т.к. в оригинальной функции тех дополнительных параметров нет.
    Иными словами, работа перехватчика должна быть незаметной для того кода, который использует перехватываемую функцию, как будто того перехватчика и нет.
    Если же вам нужна функция, работающая по-другому - сделайте отдельную функцию, но не нужно путать её с оригиналом с помощью перехвата. Вмешательство в стандартную логику обычно приводит только к проблемам.

  10. #20
    Аватар для KrutoyKrosch
    Пользователь

    Статус
    Оффлайн
    Регистрация
    26.02.2016
    Сообщений
    301
    Репутация:
    7 ±
    Я иду против системы, поэтому нормальна

 

 
Страница 2 из 3 ПерваяПервая 1 2 3 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •