PDA

Просмотр полной версии : [Вопрос] По sscanf.



KakbeYura
10.08.2014, 22:46
В команде есть 3 параметра. Из них обязательных всего 2, один из них может быть как строковым, так и численным. Для каждой ситуации похожие действия. Есть что то помимо такого способа? :


if(!sscanf(params, "ddd", pl, params[0], params[1]))
{
// ...
}
else if(!sscanf(params, "sdd", name, params[0], params[1]))
{
// ...
}
else if(!sscanf(params, "dd", pl, params[0]))
{
// ...
}
else if(!sscanf(params, "sd", name, params[0]))
{

Гуглил, ничего не находил. А такой способ слишком длинный, может подскажите что-то эффективнее? strtok не предлагать, пожалуйста

L0ndl3m
10.08.2014, 22:53
new
text[28];

sscanf(params, "I(-1)I(-1)s[28]", params[0], params[1], text)

if(params[0] == -1)
// -> числовой параметр 0 пропущен
if(params[1] == -1)
// -> числовой параметр 1 пропущен
if(isnull(text))
// -> строковой параметр пропущен

KakbeYura
10.08.2014, 23:12
У меня строковый параметр в начале. Прокатит?


new
text[28];

sscanf(params, "s[28]I(-1)I(-1)", text, params[0], params[1])

if(isnull(text))
// -> строковой параметр пропущен
if(params[0] == -1)
// -> числовой параметр 0 пропущен
if(params[1] == -1)
// -> числовой параметр 1 пропущен


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

Плюс, вместо строкового параметра там может быть численный

L0ndl3m
10.08.2014, 23:19
Прокатит в том случае, если в параметре одно слово.

KakbeYura
10.08.2014, 23:55
А прокатит, если там число? Ну тоесть там или число, либо слово, в любом случае записываю в массив, а затем функцией strval проверю, число там или слово. Ссканф воспримит число как строку?