Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 5 из 5

Тема: sscanf

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

    Статус
    Оффлайн
    Регистрация
    16.06.2015
    Адрес
    Ростов-на-Дону, Россия
    Сообщений
    23
    Репутация:
    1 ±

    sscanf

    Привет! Нашел готовую команду, изменяющую скин, добавил в нее от себя сообщение, в котором написан на какой ID изменен скин. Как этот код работает я понимаю, за исключением одной строки:
    PHP код:
    CMD:skin(playeridparams[])
    {
         if(
    pInfo[playerid][pLogged] == false) return SCM(playeridCOLOR_RED"[Server]: Вы не авторизованы!");
        new 
    string[32];    new skinid;
        if(
    sscanf(params,"d"skinid)) return SCM(playeridCOLOR_WHITE"Используйте: {DC1313}/skin [id]");
        
    SetPlayerSkin(playerid,skinid);
        
    pInfo[playerid][pSkin] = GetPlayerSkin(playerid);
        
    format(stringsizeof(string), "Ваш скин изменен на {E81B05}%d"skinid);
        
    SCM(playeridCOLOR_YELLOWstring);
        return 
    1;

    Непонятна мне вот эта строка:
    PHP код:
    if(sscanf(params,"d"skinid)) return SCM(playeridCOLOR_WHITE"Используйте: {DC1313}/skin [id]"); 
    Прошу кого-нибудь объяснить мне, как это работает) Заранее спасибо!

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

    Статус
    Оффлайн
    Регистрация
    19.12.2013
    Сообщений
    86
    Репутация:
    17 ±
    Если функция sscanf не сможет из строки "вытащить" целочисленный параметр (забыли его в команде ввести), то она, эта функция вернёт нечто отличное от 0, что воспримется условным оператором if как истина, выполнится return с выводом сообщения, что оборвёт дальнейшее выполнение кода команды.

    Ну а если sscanf "вытащит" целое число, то запишет его в переменную, вернёт 0, что для оператора if является "ложь", и код пойдёт выполнятся дальше.
    Последний раз редактировалось Avertus; 22.06.2015 в 21:29.

  3. Пользователь сказал cпасибо:
    Straik32423 (22.06.2015)
  4. #3
    Аватар для Snoop_Dog
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.02.2014
    Сообщений
    65
    Репутация:
    0 ±
    Так на заметку, skinid можно убрать и использовать params[0]
    Последний раз редактировалось Snoop_Dog; 22.06.2015 в 22:08.

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

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Цитата Сообщение от Snoop_Dog Посмотреть сообщение
    Так на заметку, skinid можно убрать и использовать parmas[0]
    Да.

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

    Статус
    Оффлайн
    Регистрация
    16.06.2015
    Адрес
    Ростов-на-Дону, Россия
    Сообщений
    23
    Репутация:
    1 ±
    Цитата Сообщение от Avertus Посмотреть сообщение
    Если функция sscanf не сможет из строки "вытащить" целочисленный параметр (забыли его в команде ввести), то она, эта функция вернёт нечто отличное от 0, что воспримется условным оператором if как истина, выполнится return с выводом сообщения, что оборвёт дальнейшее выполнение кода команды.

    Ну а если sscanf "вытащит" целое число, то запишет его в переменную, вернёт 0, что для оператора if является "ложь", и код пойдёт выполнятся дальше.
    Это я понимаю. Я хотел узнать именно как она работает, а не результат ее выполнения. Допустим, я хочу ставить такие же условия в других командах. Я сделал с помощью этой строки ( чуть-чуть подкорректировав ) команду /money. Но я не смогу использовать эту функцию в дальнейшем, если не пойму, как она работает...

 

 

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

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

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

Ваши права

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