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

    Статус
    Оффлайн
    Регистрация
    09.02.2017
    Сообщений
    18
    Репутация:
    0 ±

    Работа sscanf

    Не могу понять как работает условие при использовании sscanf (в частности, допустим, при его применении в написании команд)
    Опытным путём я установил что sscanf возвращает 0 если успешно разделил строку и -1 если этого сделать не удалось
    Так вот вопрос, почему такая конструкция выдаёт игроку сообщение когда он что-то неправильно указал, если sscanf возвращает -1 в таком случае и все то что находится в if(..) является верным и код должен идти дальше, без выдачи игроку return, ведь по сути же все что конкретно не 0 - истина
    А если sscanf успешно разделил бы, то в условие наоборот бы передалось 0 и код должен выдать этот самый return, но на практике же все происходит ровным счетом наоборот, почему?
    Код:
    if(sscanf(params, "d", num)) return SendClientMessage(...)
    Последний раз редактировалось Димарио; 15.07.2019 в 16:24.

  2. #2
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2590 ±
    Цитата Сообщение от Димарио Посмотреть сообщение
    Так вот вопрос, почему такая конструкция выдаёт игроку сообщение когда он что-то неправильно указал, если sscanf возвращает -1 в таком случае и все то что находится в if(..) является верным и код должен идти дальше, без выдачи игроку return
    sscanf при неудачном считывании возвращает -1, условие оказывается истинным (ибо значение ненулевое) и выполняется собственно то, что внутри if - т.е. вывод сообщения об ошибке "return SendClientMessage(...)". И наоборот: sscanf успешно считывает данные, возвращает 0, условие не выполняется, сообщение об ошибке не выводится и код выполняется дальше.
    Всё просто же.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  3. Пользователь сказал cпасибо:
    Димарио (15.07.2019)
 

 

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

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

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

Ваши права

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