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

    Статус
    Оффлайн
    Регистрация
    26.02.2016
    Сообщений
    301
    Репутация:
    7 ±

    Pawn и массивы

    Это что-то...

    Код:
    new const
    	NameAllKey[][] =
    	{
    		{"A", 0x41},
    		{"B", 0x42},
    		{"C", 0x43},
    		{"D", 0x44},
    		{"E", 0x45},
    		{"F", 0x46},
    		{"G", 0x47}, 
    		{"H", 0x48}, 
    		{"I", 0x49},
    		{"J", 0x4A},
    		{"K", 0x4B},
    		{"L", 0x4C},
    		{"M", 0x4D},
    		{"N", 0x4E},
    		{"O", 0x4F},
    		{"P", 0x50},
    		{"Q", 0x51},
    		{"R", 0x52},
    		{"S", 0x53},
    		{"T", 0x54},
    		{"U", 0x55},
    		{"V", 0x56},
    		{"W", 0x57},
    		{"X", 0x58},
    		{"Y", 0x59},
    		{"Z", 0x5A}
    	};
    Потом

    Код:
    for(new i; i < sizeof NameAllKey; i++)
    	{
    		printf("KEY FIND - %s\n", NameAllKey[i][0]); // Выводит нормально все буквы
    
    		if(!strcmp(NameAllKey[i][0], key)) // Если буква равна той которая мне нужна 
    		{
    			printf("YESSSSSSSSSS - %s\n", NameAllKey[i][0]); // Вывожу букву - все правильно
    			KeyIDAnim[playerid][slot] = NameAllKey[i][1]; // Записываю номер этой буквы в другую переменную
    
                            // Смотрю у меня скрипт не работает хотя все правильно, решил вывести номер буквы
    
    			printf("DAAAAAAAAA - %i\n", NameAllKey[i][1]); // А ВОТ ТУТ УЖЕ НЕ ПРАВИЛЬНО, ВМЕСТО НОРМАЛЬНО ЧИСЛА В МАССИВЕ ОНО ВЫВОДИТ 0 ПОСТОЯННО 
    		}
    	}
    Пометил комментариями в коде. Что делать?

    Можно конечно два массива попробовать, но не костыль ли это?
    Последний раз редактировалось KrutoyKrosch; 21.11.2017 в 03:27.

  2. #2
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Во первых, что это за понтокод с шестнадцатеричной системой записи? Почему нельзя просто сделать так:
    PHP код:
    new const
        
    NameAllKey[][] =
        {
            {
    "A"'A'},
            {
    "B"'B'},
            {
    "C"'C'},
            
    //...
        
    }; 
    А лучше вообще отказаться от записи кнопки в виде строки и записывать только числом. И проверять числа гораздо проще/быстрее, и выводить не так уж и сложно (спецификатор "%c"). Тем более, что твоя запись в виде строки будет равносильна записи числом (каждый символ равен определённому числу и твоя строка будет записана как число + ещё одна ячейка под нуль-символ. То бишь, просто ячейка массива впустую).

    Во-вторых, куда ты записываешь строку? Сейчас ты и строку, и число пытаешься впихнуть в одну и ту же меру массива. А потом выводишь нуль-символ в своём коде, который ты пометил комментариями. Чтоб сделать так, как хочешь ты (что криво), нужно сделать так:
    PHP код:
    new const
        
    NameAllKey[][][] =
    //... 
    Но это крайне странное и кривое решение.



    А не ругается компилятор, скорее всего, из-за особенности работы (или бага) с массивами, при которой можно обращаться к следующей мере массива "из предыдущей". Я не особо силён в формулировке данного определения, но суть в том, что сейчас твой код работает так:
    PHP код:
    new const
        
    NameAllKey[][] =//Создаётся двумерный массив
        
    {
            {
    "A"0x41},//В ячейки [0][0] записывается значение "A", а так как нет ещё одной меры (вторая мера уходит под хранение текста), 0x41 записывается в следующую ячейку (то бишь, [1][0])
            
    {"B"0x42},//Теперь очередь доходит до этой записи и уже ячейка [1][0] перезаписывается значением "B", а 0x42 переходит в следующую ячейку. 
            
    {"C"0x43},//И так далее до самого конца
            //...
        
    }; 
    В итоге получается, что у тебя первая мера заполнена всеми буквами от A до Z, а вторая является хранилищем текста (значение буквы + нуль-символ). Точнее, буквы записаны во вторую меру... Ну ты понял, в общем.

    Но пенять во всём ЯП или компилятор глупо, ибо тут уже сугубо либо твоя невнимательность, либо незнание того, чем являются символы в строке и как работать со строками в массивах.
    Последний раз редактировалось DeimoS; 21.11.2017 в 04:49.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  3. Пользователь сказал cпасибо:
    KrutoyKrosch (21.11.2017)
  4. #3
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Я что-то прикола не понял, весь этот код можно записать так:
    PHP код:
    if ('A' <= key[0] <= 'Z') {
        
    KeyIDAnim[playerid][slot] = key[0];


  5. 4 пользователя(ей) сказали cпасибо:
    Alexey Melnik (21.11.2017) Daniel_Cortez (21.11.2017) KrutoyKrosch (21.11.2017) vasyok28 (21.11.2017)
  6. #4
    Аватар для KrutoyKrosch
    Пользователь

    Статус
    Оффлайн
    Регистрация
    26.02.2016
    Сообщений
    301
    Репутация:
    7 ±
    Да спасибо, забыл что можно делать через ' '. Просто "Сегодня, 02:22"

 

 

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

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

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

Ваши права

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