Quote:
Originally Posted by OKStyle
Можно было проще, делай всё по порядку. Лет 6 назад я писал:
pawn Код:
if(strcmp(cmd, "/ban", true, 4) == 0) { new tmp[128]; // создали новую переменную для хранения параметров tmp = strtok(cmdtext, idx); // засунули в неё параметры до следующего пробела if(strlen(tmp) < 1) return SendClientMessage(playerid, 0xFF0000FF, "Синтаксис: /ban [playerid][reason]"); // если нет аргументов new targetid = strval(tmp); // взяли ID игрока из параметров new pos = strfind(cmdtext, " ", true, 4); // ищем пробел после ID if(pos == -1) return SendClientMessage(playerid, 0xFF0000FF, "Синтаксис: /ban [playerid][text]"); // если больше аргументов нет format(tmp, sizeof(tmp), "Администратор %s забанил игрока %s. Причина: %s", PlayerInfo[playerid][pName], PlayerInfo[targetid][pName], cmdtext[pos + 1]); // форматируем с причиной, полученной из параметров после следующего пробела (важно: причина может быть с пробелами, т.е. в несколько слов). SendClientMessage(targetid, 0xFF0000FF, tmp); Ban(playerid); return 1; }
Добавляешь ещё один strtok только для цифрового параметра, а потом уже strfind.
|
А если например с параметром еще одним для тектового, получается так ?
то есть 1 параметр число и два текстовых ? в таком случае как будет работать проверка на пробел ?
Код:
strfind(cmdtext, " ", true, 4);
ведь если я укажу в причине текст с пробелами то получатся что он пойдет в следующий параметр верно ?
Синтаксис: /ban [playerid][text1][text2]
Quote:
Originally Posted by Mutha_X
На дворе 2к19 уже.
Народ до сих пор пользуется strtok (WTF).
Взял бы сразу sscanf
|
Дело не в том что проще, дело в том что для меня это интересно.
В sscanf там понятно задал количество параметров то есть , int, sntring ,float грубо говоря и ты уже от них отталкиваешься. А вот тут для меня была задача. почему именно так работает код, ведь изначально не указывается как бы количество запрашиваемых параметров они все идут в коде по очередно. просто я такой человек могу сутками сидеть и разбираться в коде что и как работает. что бы потом не было проблем.