Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 4 из 4
  1. #1
    Аватар для Elrmrnt-Kritik
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.11.2017
    Сообщений
    136
    Репутация:
    10 ±

    Работа со sscanf2. Неопциональные параметры

    Здравствуйте. Хотел немножко уточнить, вот есть такой код:
    Код:
    if(sscanf(params, "uD(5)S(Не указано)[32]", params[0], params[1], params))
    (взял его на этом форуме в другой теме)

    Я так понял здесь D (integer) и S (string) - неопциональные параметры. А что означает (5) и что за (Не указано)? Это сколько пропускать? Если да, то возможно ли не указывать длину пропускаемую для S?

    И возможно ли аналогично использовать необязательные параметры для вещественных типов, например, F? Не видел примера с ним.

    Также встретился еще с таким более страшным кодом
    Код:
    sscanf(params, "I(-1)is[32]", targetid, mute_time, reason)
    Судя по контенту в интернете, I - игнорирование параметров. Но я не совсем разобрался как им пользоваться...
    Последний раз редактировалось Elrmrnt-Kritik; 09.03.2018 в 23:19.

  2. Пользователь сказал cпасибо:
    Josan_Solomon (20.08.2018)
  3. #2
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    В скобках после больших букв указывается то, какое значение устанавливать для переменной в случае, если в строке не найдено значение для спецификатора.
    То бишь, в этом примере
    PHP код:
    if(sscanf(params"uD(5)S(Не указано)[32]"params[0], params[1], params)) 
    Если указать только ID игрока (первый параметр), то в "params[1]" попадёт число "5", а в "params" строка "Не указано".
    Хотя пример, на самом деле, не рабочий, ибо строка перезапишет ID игрока и второй параметр (params[0] и params[1])

    Во втором случае то же самое, только вместо 5 будет стоять -1. А "i"/"I" - это то же самое, что и "d"/"D" (в Pawn, по крайней мере) - то есть, целочисленный спецификатор.


    Все доступные спецификаторы можно найти в теме на официальном форуме. Собственно, вот он:
      Открыть/закрыть
    PHP код:
    Format                    Use
    L(true/false)                Optional logical truthity
    l                    Logical truthity
    K
    <callback>(any format number)            Optional custom operator
    k
    <callback>                Custom operator
    B
    (binary)                Optional binary number
    b                    Binary number
    N
    (any format number)            Optional number
    n                    Number
    C
    (character)                Optional character
    c                    Character
    I
    (integer)                Optional integer
    i                    Integer
    D
    (integer)                Optional integer
    d                    Integer
    H
    (hex value)                Optional hex number
    h                    Hex number
    O
    (octal value)                Optional octal value
    o                    Octal value
    F
    (float)                Optional floating point number
    f                    Floating point number
    G
    (float/INFINITY/-INFINITY/NAN/NAN_E)    Optional float with IEEE definitions
    g                    Float with IEEE definitions
    {                    Open quiet section
    }                    Close quiet section
    P
    <delimiters>                Multiple delimiters change
    p
    <delimiter>                Delimiter change
    Z
    (string)[length]            Invalid optional string
    z
    (string)[length]            Deprecated optional string
    S
    (string)[length]            Optional string
    s
    [length]                String
    U
    (any format number)            Optional user (bot/player)
    u                    User (bot/player)
    Q(any format number)            Optional bot (bot)
    q                    Bot (bot)
    R(any format number)            Optional player (player)
    r                    Player (player)
    A<type>(default)[length]        Optional array of given type
    a
    <type>[length]                Array of given type
    E
    <specification>(default)        Optional enumeration of given layout
    e
    <specification>            Enumeration of given layout
    'string'                Search string
    %                    Deprecated optional specifier prefix
    ?                    Local options specifier 

    Тут же написано, что для указания необязательного спецификатора для вещественного числа нужно использовать "F(значение)".


    И да, если не нужно никакое значение заносить в переменную в случае, если параметр в команде не указан, то просто оставляешь скобки пустыми
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  4. 2 пользователя(ей) сказали cпасибо:
    Elrmrnt-Kritik (10.03.2018) Josan_Solomon (20.08.2018)
  5. #3
    Аватар для Elrmrnt-Kritik
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.11.2017
    Сообщений
    136
    Репутация:
    10 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Тут же написано
    Честно говоря, не видел это добро. Как-то вот под sscanf нет толковых уроков, как, например, про регулярные выражения. А так разобрался, спасибо большое))

  6. #4
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Так а что может быть более толковое, чем статья на официальном сайте? :)
    Если плохо с английским, гугл-переводчик может спасти ситуацию. А там, где даже гугл-переводчик выдаёт что-то непонятное, всегда на помощь может прийти метод научного тыка
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  7. 3 пользователя(ей) сказали cпасибо:
    Elrmrnt-Kritik (10.03.2018) geneff (11.03.2018) Josan_Solomon (20.08.2018)
 

 

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

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

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

Ваши права

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