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

    Статус
    Оффлайн
    Регистрация
    21.06.2014
    Сообщений
    16
    Репутация:
    1 ±
    Цитата Сообщение от Mazzilla Посмотреть сообщение
    Дело не в скобках. Ошибки выдаёт на цифры 0 и 9, так как вы сравниваете один символ с буквой из алфавита и тут же с цифрой. Самый первый вариант автора самый рациональный.
    Можно использовать одну переменную static len = strlen(input); и подставлять вместо вызова тойже функи в разных частях кода)

  2. Пользователь сказал cпасибо:
    Desulaid (21.03.2015)
  3. #12
    Аватар для NewGreen
    Пользователь

    Статус
    Оффлайн
    Регистрация
    29.09.2014
    Сообщений
    61
    Репутация:
    44 ±
    Цитата Сообщение от Mazzilla Посмотреть сообщение
    Дело не в скобках. Ошибки выдаёт на цифры 0 и 9, так как вы сравниваете один символ с буквой из алфавита и тут же с цифрой. Самый первый вариант автора самый рациональный.
    Есть такая таблица ASCII в которой некоторым символам сопоставлены числовые коды. Именно на основе этой таблицы выполняется проверка ниже:
    PHP код:
    if((inputtext[i] >= && inputtext[i] <= 9) || (inputtext[i] >= 'a' &&  inputtext[i] <= 'z') || (inputtext[i] >= 'A' && inputtext[i] <= 'Z')) continue; 
    Вывод: компьютеру все равно, что он сравнивает число и букву сразу или по очереди, он сравнивает коды таблицы.
    Теперь о скобках, ошибки возникают вероятно из-за того, что компилятор не понимает приоритета унарных операторов, и не может определить что с чем сравнивать, поставив скобки мы задаем явный приоритет, и поэтому ошибка пропадает.
    Теперь о рациональности, оригинальный код был такой:
    PHP код:
    switch(inputtext[i])  
            {  
                case 
    '0'..'9''a'..'z''A'..'Z': continue;  
                default: return 
    ShowPlayerDialog(playerid1DIALOG_STYLE_INPUT"Авторизация""{FFFFFF}Введённый пароль содержит запрещённые символы!\nВведите пароль от аккаунта для входа на сервер:""Вход""Выход");  
            } 
    Если case переписать используя if он будет выглядеть примерно так:
    PHP код:
    case '0'..'9':
    for(new 
    010j++)
        if(
    inputtext[i] == i) return true;
    'a'..'z':
    for(new 
    97123j++) // коды в таблице ASCII 97 - a, 122 - z
        
    if(inputtext[i] == i) return true;
    'A'..'Z:
    for(new j = 65; j < 91; j++)  // коды в таблице ASCII 65 - A, 90 - Z
        if(inputtext[i] == i) return true; 
    Итого теоретически по 62 проверки на каждый символ массива.
    В том варианте который предложил я выполняется проверка на диапазон, находится ли символ в диапазоне от до, всего 3 проверки.
    Последний раз редактировалось NewGreen; 20.03.2015 в 23:55.

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

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    Цитата Сообщение от Mazzilla Посмотреть сообщение
    Дело не в скобках. Ошибки выдаёт на цифры 0 и 9, так как вы сравниваете один символ с буквой из алфавита и тут же с цифрой. Самый первый вариант автора самый рациональный.
     Спойлер: картинка


    - - - Добавлено - - -

    Цитата Сообщение от NewGreen Посмотреть сообщение
    Есть такая таблица ASCII в которой некоторым символам сопоставлены числовые коды. Именно на основе этой таблицы выполняется проверка ниже:
    PHP код:
    if((inputtext[i] >= && inputtext[i] <= 9) || (inputtext[i] >= 'a' &&  inputtext[i] <= 'z') || (inputtext[i] >= 'A' && inputtext[i] <= 'Z')) continue; 
    Вывод: компьютеру все равно, что он сравнивает число и букву сразу или по очереди, он сравнивает коды таблицы.
    Теперь о скобках, ошибки возникают вероятно из-за того, что компилятор не понимает приоритета унарных операторов, и не может определить что с чем сравнивать, поставив скобки мы задаем явный приоритет, и поэтому ошибка пропадает.
    Теперь о рациональности, оригинальный код был такой:
    PHP код:
    switch(inputtext[i])  
            {  
                case 
    '0'..'9''a'..'z''A'..'Z': continue;  
                default: return 
    ShowPlayerDialog(playerid1DIALOG_STYLE_INPUT"Авторизация""{FFFFFF}Введённый пароль содержит запрещённые символы!\nВведите пароль от аккаунта для входа на сервер:""Вход""Выход");  
            } 
    Если case переписать используя if он будет выглядеть примерно так:
    PHP код:
    case '0'..'9':
    for(new 
    010j++)
        if(
    inputtext[i] == i) return true;
    'a'..'z':
    for(new 
    97123j++) // коды в таблице ASCII 97 - a, 122 - z
        
    if(inputtext[i] == i) return true;
    'A'..'Z:
    for(new j = 65; j < 91; j++)  // коды в таблице ASCII 65 - A, 90 - Z
        if(inputtext[i] == i) return true; 
    Итого теоретически по 62 проверки на каждый символ массива.
    В том варианте который предложил я выполняется проверка на диапазон, находится ли символ в диапазоне от до, всего 3 проверки.
    Да ты новый DeimoS. Так же все объясняешь и расписываешь

  6. #14
    Аватар для gangzone.ini
    Пользователь

    Статус
    Оффлайн
    Регистрация
    15.06.2014
    Сообщений
    651
    Репутация:
    106 ±
    {FFFFFF}Добро пожаловать на сервер - 34
    Ваш ник зарегистрирован - 23
    Логин: {1DBF3A}%s{FFFFFF} - 47
    {FF0000}Неверный пароль! Осталось попыток: %d - 44
    new string[148];

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

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    Цитата Сообщение от gangzone.ini Посмотреть сообщение
    new string[148];
    Раз уж пошло на это дело, то 150; Так как 34+23+48+44+1=150
    И не хочу повторяться, этот текст пробный :)

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

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    Решено
    (закрывай тему)

 

 
Страница 2 из 2 ПерваяПервая 1 2

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

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

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

Ваши права

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