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

Тема: nstrval

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

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

    nstrval

    Описание:

    Стандартная функция strval возвращает 0 когда в нее поступила строка без числа, и так же она возвращает 0 если в нее поступила строка с числом 0.

    Поэтому это небольшой FIX этой функции, который добавит отдельный параметр для числа.

    Возвращает:

    Код:
    0 - удачно выполнилась 
    1 - в строке нету числа
    Использование:
    PHP код:
    new val;

    if(!
    nstrval("21"val))
        
    printf("Val %d"val);
    else 
       print(
    "Error"); 
    Сама функция (в конец кода):

    PHP код:
    stock nstrval(string[], &val)
    {
        
    val strval(string);
        return !
    val && string[0] != '0';

    Автор: _KROSCH

    Спасибо Daniel_Cortez за идею.
    Последний раз редактировалось KrutoyKrosch; 17.01.2017 в 14:27.

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

    Статус
    Оффлайн
    Регистрация
    04.01.2015
    Адрес
    Гомель, Беларусь
    Сообщений
    547
    Репутация:
    158 ±
    Функция не учитывает строки, которые не пусты, но при этом никакой цифры в себе не имеют. Лучше будет просто делать проверку через "IsNumeric"
    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker

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

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






  4. #4
    Аватар для Nexius_Tailer
    Пользователь

    Статус
    Оффлайн
    Регистрация
    04.01.2015
    Адрес
    Гомель, Беларусь
    Сообщений
    547
    Репутация:
    158 ±
    Немного не так прочитал проверку "string[0] != '0';" (сначала показалось, что тут проверка на завершающий символ xD)

    Но тогда возникает другая проблема. Вот в такой строке:
    PHP код:
    new string[] = "_0"//Или любой другой знак в нулевой ячейке, но кроме цифр 
    Сама функция вернёт 1 (неудачно), а число в строке есть и обычный strval его на самом деле видит.
    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker

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

    Статус
    Оффлайн
    Регистрация
    26.02.2016
    Сообщений
    301
    Репутация:
    7 ±
    Видит? Точно? А почему же тогда 0 выводит? Если бы она его видела вернуло бы 1 и далее вывело то число



    Тем более вчитайся в return, там же стоит проверка что strval 0 вернула

    PS. Побаловался, с русскими символами только реагирует на число в таком случае (если число среди символов), но и то возвращает 0
    Последний раз редактировалось KrutoyKrosch; 17.01.2017 в 14:05.

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

    Статус
    Оффлайн
    Регистрация
    04.01.2015
    Адрес
    Гомель, Беларусь
    Сообщений
    547
    Репутация:
    158 ±
    Хм, значит всё-же хорошая реализация.
    Что-то мне казалось, что strval не только конкретные вырезки строки с числом преобразовывать умеет, потому подумал, что вариант с проверкой только нулевой ячейки ненадёжен
    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker

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

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Почему при успешном выполнении возвращается 0, а не 1?

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

    Статус
    Оффлайн
    Регистрация
    26.02.2016
    Сообщений
    301
    Репутация:
    7 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    Почему при успешном выполнении возвращается 0, а не 1?
    Если честно, то мне чот влом было переделать условие так, что бы оно 1 возвращало и работало правильно)0))

    Если немного соврать, а чем я хуже создателя strcmp?

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

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Убейте меня, но я не могу жить без костылей.

    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 - пустая строка либо введены не цифры.
    Если число введено нормально - вернуть его.
    Последний раз редактировалось $continue$; 17.01.2017 в 17:38.
    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

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

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

    Если немного соврать, а чем я хуже создателя strcmp?
    strcmp может возвращать помимо нуля ещё как минимум 1 или -1. Такие значения указывают на конкретные различия, что-то вроде того, сколько символов в строках не совпало

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

    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker

 

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

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

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

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

Ваши права

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