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

    Статус
    Оффлайн
    Регистрация
    15.01.2016
    Адрес
    Приморье, Спасск-Дальний
    Сообщений
    165
    Репутация:
    7 ±

    Switch по тексту, или способы перебора значений[].

    Привет всем.

    PHP код:
    switch(/*переменная*/)
    {
          case 
    'm':{}
          case 
    'mm':{}//тут ошибка

    Примером послужит С#. Работа с датой на высшем уровне.
    В моде хотелось бы делать так:
    GetDate("m");//вывод порядкового номера месяца
    GetDate("mm");//вывод месяца словом
    Последний раз редактировалось BadPawn; 27.07.2016 в 05:22. Причина: добавил [php] ))

  2. #2
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Вам, как минимум, необходимо использовать строку (строковый литерал), ибо ординарные кавычки исключительно для одного символа (символьный литерал).
    Впрочем, ваш алгоритм не сработает, ведь используется строка. Вы можете использовать разнообразные функции для работы со строками (strcmp).

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

    Статус
    Оффлайн
    Регистрация
    15.01.2016
    Адрес
    Приморье, Спасск-Дальний
    Сообщений
    165
    Репутация:
    7 ±
    Кому не сложно, покажите пример использование любой функции, в которой будет итог зависеть от введенных данных.

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

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    PHP код:
    new pName[25];

    GetPlayerName(playeridpName25);

    if(
    strcmp(pName"Jeims_Bond",true) == 0)
    {
        print(
    "Джеймс Бонд авторизовался =3");

    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

  6. Пользователь сказал cпасибо:
    BadPawn (28.07.2016)
  7. #5
    Аватар для Desulaid
    лесоруб продакшен

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    Можно так работать

    PHP код:
    new string[3] = "mm";
    for (new 
    isizeof(string); i++)
    {
        if (
    string[i] == 'm' && string[1] == 'm')
        {
            print(
    "Да, есть здесь \"mm\"");
        }


  8. Пользователь сказал cпасибо:
    BadPawn (28.07.2016)
  9. #6
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    ИМХО, идеальный вариант: http://pro-pawn.ru/showthread.php?7923
    Пример: http://pro-pawn.ru/showthread.php?7925
    Принцип работы: во время компиляции из строки вычисляется хеш, который можно использовать в switch. Как по читаемости кода, так и по производительности это куда лучше, чем куча вызовов strcmp или посимвольное сравнение.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  10. 2 пользователя(ей) сказали cпасибо:
    BadPawn (28.07.2016) Desulaid (16.08.2016)
  11. #7
    Аватар для BadPawn
    Пользователь

    Статус
    Оффлайн
    Регистрация
    15.01.2016
    Адрес
    Приморье, Спасск-Дальний
    Сообщений
    165
    Репутация:
    7 ±
    Вопрос скорее к DC.

    PHP код:
    stock GetDate(const string[])
    {
        switch(
    YHash(stringtruehash_fnv1))
        {
            case 
    _I@f<m>:
            {
                static const 
    months_text[12][9] =
                {
                    
    "Январь",
                    
    "Февраль",
                    
    "Март",
                    
    "Апрель",
                    
    "Май",
                    
    "Июнь",
                    
    "Июль",
                    
    "Август",
                    
    "Сентябрь",
                    
    "Октябрь",
                    
    "Ноябрь",
                    
    "Декабрь"
                
    };
                static 
    month;
                
    getdate(_month_);
                
    printf("месяц: %s"months_text[month-1]);
                return 
    1;
            }
        }
        return 
    1;

    Проверочный код. Все работает. Как вернуть значение в case?
    PHP код:
    format(strsizeof str"%s"GetDate("m")); 

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

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    А, зачем ещё 1 switch? Просто вернуть уже результат (порядковый номер или название месяца)
    У меня, кроме как привести "типы" данных к одному виду, ничего в голову не пришло.
    Пример использования:
    PHP код:
    main()
    {
        new 
    buffer[9];
        new 
    result GetDate("m"buffer);
        if(
    result == -1)
        {
            
    printf("Порядковый номер месяца: %s"buffer);
        }
        else if(
    result == 0)
        {
            
    printf("Название месяца: %s"buffer);
        }

    Сама функция:
    PHP код:
    stock GetDate(const string[], output[], size sizeof(output))
    {
        static 
    month;
        
    getdate(_month_);
        switch(
    YHash(stringfalsehash_fnv1))
        {
            case 
    _I@f<m>:
            {
                
    valstr(outputmonth);
                return -
    1;
            }
            case 
    _I@f<mm>:
            {
                static const 
    months_text[12][9] =
                {
                    
    "январь",
                    
    "февраль",
                    
    "март",
                    
    "апрель",
                    
    "май",
                    
    "июнь",
                    
    "июль",
                    
    "август",
                    
    "сентябрь",
                    
    "октябрь",
                    
    "ноябрь",
                    
    "декабрь"
                
    };
                
    strins(outputmonths_text[month-1], 0size);
                return 
    0;
            }
        }
        return 
    1;

    P.S: Костыли в деле :)
    Последний раз редактировалось $continue$; 01.08.2016 в 17:08.
    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

  13. Пользователь сказал cпасибо:
    BadPawn (01.08.2016)
  14. #9
    Аватар для BadPawn
    Пользователь

    Статус
    Оффлайн
    Регистрация
    15.01.2016
    Адрес
    Приморье, Спасск-Дальний
    Сообщений
    165
    Репутация:
    7 ±
    Пацаны, что-то не корректно работает. ((

    Сегодня 16 число.
    PHP код:
            printf("до: %i"d);// итог: 16
            
    valstr(outputd);
            
    printf("после: %i"output);// итог: 49 
    PHP код:
    main()
    {
        new 
    buff[9];
        
    printf("%i"GetDate("d"buff));// итог: 0

    И постоянно пишет варнинг:
    PHP код:
    warning 203symbol is never used"maxlength" 
    Криво робит valstr, или в чем проблема? Подскажите пожалуйста. В тупике.

    А, что делать с maxlength и варнингом - хз. о-о (убрать если только:))

  15. #10
    Аватар для Desulaid
    лесоруб продакшен

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    Цитата Сообщение от BadPawn Посмотреть сообщение
    Пацаны, что-то не корректно работает. ((

    Сегодня 16 число.
    Код:
    printf("до: %i", d);// итог: 16
    valstr(output, d);
    printf("после: %i", output);// итог: 49
    Потому что строку надо брать не %i, а %s.

    Цитата Сообщение от BadPawn Посмотреть сообщение
    И постоянно пишет варнинг:
    PHP код:
    warning 203symbol is never used"maxlength" 
    Криво робит valstr, или в чем проблема? Подскажите пожалуйста. В тупике.

    А, что делать с maxlength и варнингом - хз. о-о (убрать если только:))
    Похоже, что maxlength у вас - аргумент функции, который вы не используете. Можно использовать #pragma

    PHP код:
    #pragma unused maxlength 

  16. Пользователь сказал cпасибо:
    BadPawn (16.08.2016)
 

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

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

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

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

Ваши права

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