PDA

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



StevenH
27.03.2017, 06:22
Здравствуйте, возникла проблемка с условиями. Есть следующее условие (Если фракция не равняется 11 И субфракция не равняется 0, тогда возвращаем 1):


if(pData[playerid][pFraction] != 11 && pData[playerid][pSubfraction] != 0) return true;


Но, все равно.. Выдаю себе 11 фраку и 1 субфракцию (да и вообще любую фракцию, хоть нулевую), и условие проходит..

StevenH
27.03.2017, 14:22
Код целиком покажи. Условие составлено верно

Диалог выводится в любом случае..



else if(areaid == gAreas[arBoard])
{
if(pData[playerid][pFraction] != 11 && pData[playerid][pSubfraction] != 0) return true;
ShowPlayerDialog(playerid, dBoard, 1, "{FFFF80}Доска", "{FFFFFF}Введите текст на доске\n\nДля переноса используйте знак \"{33AA33}|{FFFFFF}\"\nИспользуйте не более 26 символов на строку\n", "Ввести", "Закрыть");
}

vovandolg
27.03.2017, 14:43
printf юзай

StevenH
27.03.2017, 15:00
printf юзай
Код:


else if(areaid == gAreas[arBoard])
{
printf("Fraction - %d, SubFraction - %d", pData[playerid][pFraction], pData[playerid][pSubfraction]);
if(pData[playerid][pFraction] != 11 && pData[playerid][pSubfraction] != 0) return true;
ShowPlayerDialog(playerid, dBoard, 1, "{FFFF80}Доска", "{FFFFFF}Введите текст на доске\n\nДля переноса используйте знак \"{33AA33}|{FFFFFF}\"\nИспользуйте не более 26 символов на строку\n", "Ввести", "Закрыть");
}


Вывелось в консоль:
Fraction - 1, SubFraction - 0

Диалог все равно был показан...

vovandolg
27.03.2017, 15:04
SubFraction - 0
pData[playerid][pSubfraction] != 0
Равен 0, а по условию ты просишь чтобы был не равен 0.

Ну всё верно вот и прошло условие, может ты хотел такое условие?


if(pData[playerid][pFraction] != 11 || pData[playerid][pSubfraction] != 0) return true;


|| - или
&& - и

StevenH
27.03.2017, 15:52
SubFraction - 0
pData[playerid][pSubfraction] != 0
Равен 0, а по условию ты просишь чтобы был не равен 0.

Ну всё верно вот и прошло условие, может ты хотел такое условие?


if(pData[playerid][pFraction] != 11 || pData[playerid][pSubfraction] != 0) return true;


|| - или
&& - и

Работает, но не могу понять почему нужно || (ИЛИ)... Если нужно показать диалог какой то фракции, надо проверять его фракцию и субфракцию (т.е. если фракция игрока не равняется 11 && (И) субфракция не равняется 0, тогда возращаем 1, т.е. ничего не показываем).

Я думал если поставить знак || (ИЛИ), тогда другой человек из другой фракции, но с такой же субфракцией, сможет взять этот самый диалог..

DeimoS
27.03.2017, 16:30
С && твоё условие сработает только когда ОБА условия совпали (и фракция не равна 11, и субфракция не равна 0).

StevenH
27.03.2017, 16:45
С && твоё условие сработает только когда ОБА условия совпали (и фракция не равна 11, и субфракция не равна 0).

Все, теперь вдуплил :blush2:

Тему можно закрыть...