Вход

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



Batya_Montes
04.03.2017, 13:06
собственно вопрос вот в чем ..
в моде есть чет тип такого - пароль: %s
в формате стоит условие для заполнения %s - (us[playerid][u_pass] == '0') ? ("не заполнил") : "заполнил")
возможно ли вывести вместо слова заполнил переменную ? пробовал вот так, но компилятор просто крашился
(perem_pass[0] == '0') ? ("не заполнил") : perem_pass)

123
04.03.2017, 13:14
(!perem_pass[0]) ? ("не заполнил") : (perem_pass)

Batya_Montes
04.03.2017, 13:17
(!perem_pass[0]) ? ("не заполнил") : (perem_pass)

компилятор крашится если вместо ("123") попытаться вывести переменную

123
04.03.2017, 13:24
компилятор крашится если вместо ("123") попытаться вывести переменную

Как он может крашится? Все прекрасно компилируется. Покажите полностью как форматируйте

Batya_Montes
04.03.2017, 13:25
format(string, sizeof string, fmt_str, (!us[playerid][u_pass][0]) ? ("не заполнил") : (us[playerid][u_pass]))

123
04.03.2017, 13:28
format(string, sizeof string, fmt_str, (!us[playerid][u_pass][0]) ? ("не заполнил") : (us[playerid][u_pass]))

Что за fmt_str? Естественно так ничего работать не будет, ибо нечего форматировать.

Например подобный код, будет работать:


format(string, sizeof string, "%s%s",fmt_str, (!us[playerid][u_pass][0]) ? ("не заполнил") : (us[playerid][u_pass]))

Batya_Montes
04.03.2017, 13:29
Что за fmt_str? Естественно так ничего работать не будет, ибо нечего форматировать.

Например подобный код, будет работать:


format(string, sizeof string, "%s%s",fmt_str, (!us[playerid][u_pass][0]) ? ("не заполнил") : (us[playerid][u_pass]))

fmt_str это подсчет форматируемой строки, static const fmt_str[] = "пароль %s"; new string[sizeof fmt_str - 2 + 16];

123
04.03.2017, 13:34
fmt_str это подсчет форматируемой строки, static const fmt_str[] = "пароль %s"; new string[sizeof fmt_str - 2 + 16];

А что, сложно подсчитать 7 символов?


new string[7+16+1];
format(string, sizeof(string), "пароль %s", (!us[playerid][u_pass][0]) ? ("не заполнил") : (us[playerid][u_pass]))

Batya_Montes
04.03.2017, 13:35
А что, сложно подсчитать 7 символов?


new string[7+16+1];
format(string, sizeof(string), "пароль %s", (!us[playerid][u_pass][0]) ? ("не заполнил") : (us[playerid][u_pass]))

это для примера 7, на деле их гораздо больше

DeimoS
04.03.2017, 21:44
Это баг компилятора. Пару месяцев назад это уже обсуждалось на форуме. В данном случае проще всего отказаться от тернарного условия и переделать на обычные

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

Вот (http://pro-pawn.ru/showthread.php?14347-error-033-array-must-be-indexed-%28variable-unknown-%29&highlight=%D0%BA%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%82%D0%BE%D1%80%D0%B0) та тема