2 posts in this topic

Guest stibs
Новичок

ПАРУ СЛОВ О SSCANF...

sscanf - разделитель данных с параметром. 

Например, у нас есть данные вида: 2|3|4. Как вы заметили, разделителем между цифрами (2, 3, 4) является знак '|'. Допустим, эти данные хранятся у нас в базе данных. Как же их правильно и не сложно извлечь? Вот эту задачу и решает sscanf. 

ИСПОЛЬЗОВАНИЕ, ПАРАМЕТРЫ. 

Как уже выше было сказано, sscanf можно использовать для сохранения в бд. Можно использовать также в качестве разделителя в командах. С теорией в этой теме покончено, теперь перейдем к практике. 

 


Общий вид функции: 

sscanf(где_разделяем, "p<разделитель>идентификатор_параметра(-ов)", исходные_аргументы); 

Ну, а теперь подробней: 

  • Где разделяем: строка, из которой извлекаем данные, которые были сохранены в нее с использованием какого-нибудь разделителя. 
  • Разделитель: собственно, сам знак, который разделяет символы между собой (подробнее в начале темы). 
  • Идентификатор параметра(-ов): тип данных, который использован в строке: 
    s - string - строчный тип (буквы и т.д.); 
    i - integer - целочисленный тип (только цифры); 
    f - float - число с плавающей точкой (пример: 1,10). 
  • Исходные аргументы: аргументы (переменные), в которые будут записаны уже разделенные и структурированные данные. 

ИНФОРМАЦИЯ: 
При использования идентификатора параметра s (строчный тип) обязательно к указанию размер строки, который будет извлекаться. 
Например: 
sscanf(string, "s[20]ii", string2, number1, number2);

Теперь можно разобрать пару примерчиков для более глубокого осознания. 

Задача: У нас есть переменная, скажем, numbers. Данная переменная содержит в себе два числа, которые нам нужно выделить из нее. В качестве разделителя будет использована запятая. 

Решение: 

new number[2]; // создадим массивную переменную под два числа. 
new numbers[4] = "1,2"; // запишем в строку numbers два числа: 1 и 2 через запятую
sscanf(numbers, "p<,>dd", number[0], number[1]); // с помощью sscanf разделим каждое число в отдельную перменную
printf("%d + %d = %d", number[0]/*записываем первое число*/, number[1]/*записываем второе число*/, number[0]+number[1]/*записываем их сумму*/); // выведем их в консоль в качестве сложения

Теперь давайте возьмем что-нибудь посложнее. 

Задача: У нас есть переменная carnumbers. Она хранит в себе значение номера и региона, разделенного знаком "|". Причем, цифры в номере разделены пробелом. 

Решение: 

new carnumbers[17] = "A 1 2 3 A A | 52";
new letter[3]; // создаем массив для трех букв
new numbers[5]; // создаем массив для 5 цифр (из исходного номера - первая строка). 
sscanf(carnumbers, "p< >sdddss<|>dd", letter[0], number[0], number[1], number[2], letter[1], letter[2], number[3], number[4]); 

Из решения видно, что буква A попадет в переменную letter[0], цифра 1 в переменную number[0] ну и так далее по аналогии. 


Рад, что, возможно, хоть немного что-то прояснил в вашей голове. 

На этом урок окончен, всем спасибо. 

Автор: @stibs

При копировании на другие источники авторство к указанию обязательно.

Share this post


Link to post
Share on other sites
Бот
Великий Гуру

АВТОМАТИЧЕСКИ СФОРМИРОВАННОЕ СООБЩЕНИЕ:

Данная тема была перемещена модерацией или администрацией портала PAWNO-RUS.RU! 

Перемещена из: "Скриптинг PAWN > Готовые решения"

Перемещена в: "Скриптинг PAWN > Уроки"

 

С уважением, ваш Бот! 

Если вы НЕ согласны с переносом данной темы в раздел "Скриптинг PAWN > Уроки", пожалуйтесь на это сообщение в жалобе указав причины вашего недовольства. Спасибо. 

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • tgfoscar
      By tgfoscar
      Требуется свободное владение C++. Античит, новый способ добавления техники на сервер, совместимость с CEF и возможность добавления полезных функций. За дополнительной информацией обращайтесь к wayne_gm в Discord.
    • enotplaysupptor
      By enotplaysupptor
      Основа для мода Samp для начинающих
      Скачать файл ╔══════════════════════════════════════════════════╗
      ║               Test-RolePlay v0.1           ║
      ║       Современная основа для SA-MP серверов      ║
      ╚══════════════════════════════════════════════════╝
      ✦ О ПРОЕКТЕ:
         Добро пожаловать в Test-RolePlay - мод с нуля, 
         созданный как универсальная основа для SA-MP проектов.
         Проект был создан для тех кто не знает с чего начать и начинающих разработчиков
         Версия: T-RP v0.1 [Актуальная]
      ✦ ОСНОВНЫЕ ПЛАГИНЫ:
         ▸ CrashDetect    - отладка ошибок
         ▸ MySQL R41+     - работа с базой данных
         ▸ Pawn.CMD       - система команд
         ▸ Pawn.Regex     - регулярные выражения
         ▸ SKY            - улучшенные игровые функции
         ▸ sscanf2        - парсинг параметров
         ▸ Streamer       - динамические объекты
         ▸ TOTP           - двухфакторная аутентификация
      ✦ КЛЮЧЕВЫЕ СИСТЕМЫ:
         ┌──────────────────────────────────────────────┐
         │ 🔹 Умная регистрация/авторизация:            │
         │    - Хеширование паролей                     │
         │    - Привязка Email                          │
         │    - Выбор пола и расы персонажа             │
         ├──────────────────────────────────────────────┤
         │ 🔹 Командная система:                        │
         │    - Полный набор РП-команд                  │
         │    - Расширенные админ-команды               │
         ├──────────────────────────────────────────────┤
         │ 🔹 Игровое меню:                             │
         │    - Персональная статистика                 │
         │    - Настройки аккаунта                      │
         │    - Система жалоб и вопросов                │
         ├──────────────────────────────────────────────┤
         │ 🔹 Дополнительные системы:                   │
         │    - АФК-режим с автоматическим детектом      │
         │    - Интегрированный античит (Nex-AC)        │
         └──────────────────────────────────────────────┘
      ✦ ПЛАНЫ РАЗРАБОТКИ:
         » Добавление новых игровых систем
         » Оптимизация существующего кода
         » Расширение возможностей для администраторов
         » Улучшение пользовательского интерфейса
      Если увижу что вы хотите что бы я продолжил разработку данного мода пишите или можете проявиться большую активность










      Добавил enotplaysupptor Добавлено 09.07.2025 Категория Моды Автор Я  
    • Nekit2019
      By Nekit2019
      Добрый день, имеется сервер в CRMP 0.3е (старичок, знаю, решил поностальгировать) . меняю погоду через ркон, но она скипается через пару минут на нулевую! Не пойму от чего, скриптом отдельно на погоду нет. Пожскажите, может в gamemod0 или где еще и куда прописать можно погоду? либо чтоб менялась сама, либо статическую. Вставлял из инета код в гейммод на рандомную погоду через пол часа с уведомлениями - результат такой же, меняется на 1-20 ,но сама сбрасывается на 0 через минуту.