2015-06-26 2 views
0
void get_out_last_10(thisWay_t *thisWay) { 
int i; 
for (i = (thisWay->gens - 9 < 1 ? 1 : thisWay->gens - 9); i <= thisWay->gens; i++) { 
    printOut(&thisWay->states[i], thisWay->height, thisWay->width); 
}} 

У меня есть эта функция, я не понимаю знака '?' , Как изменить эти утверждения более «Нормально» .. другое слово сделать его логичным?Как изменить if-заявление с помощью?? C

+4

посмотрите «условный оператор» в своей книге или ссылке –

+0

Вы также можете использовать max (1, thisWay-> gens-9), который дает тот же результат. –

ответ

0

Вопросительный знак (?) Вместе с двоеточием (:) используется для условного оператора. Он работает следующим образом для вашего дела.

if(thisWay->gens - 9 < 1) 
{ 
    i=1; 
} 
else 
{ 
    i=thisWay->gens - 9; 
} 
+3

вам не хватает '<1' в' if (thisWay-> gens - 9) ' – Ediac

1
i = (thisWay->gens - 9 < 1 ? 1 : thisWay->gens - 9); 

Если вы хотите, чтобы преобразовать его, если еще это будет что-то вроде этого

if(thisWay->gens - 9 < 1){ 
    i = 1; 
} 
else{ 
    i = thisWay->gens - 9; 
} 

В этом заявлении

i = (thisWay->gens - 9 < 1 ? 1 : thisWay->gens - 9); 

если условие thisWay->gens - 9 < 1 верно это будет return 1
еще он будет retur n thisWay->gens - 9
И это возвращаемое значение будет присвоено переменной i.

3

Оператор: используется следующим образом:

 condition ? value_if_true : value_if_false 

Условие вычисляется истинным или ложным, как логическое выражение. Исходя из оценки булевого условия, все выражение возвращает value_if_true, если условие истинно, а value_if_false в противном случае. Обычно два подвыражения value_if_true и value_if_false должны иметь один и тот же тип, который определяет тип всего выражения. Важность этой проверки типов заключается в наиболее распространенных операторах условного присваивания оператора. При таком использовании она выступает как выражение в правой части оператора присваивания, следующим образом:

variable = condition ? value_if_true : value_if_false . 

Это означает, что если условие перед? истинна операция до: двоеточие осуществляется еще один после проводят, а затем полученное значение присваивается I.SO, если вы напишете его в другое, если заявление было бы:

if(thisWay->gens-9 < 1) 
    { 
    i=1; 
    } 
else 
    { 
    i=thisWay->gens - 9; 
    } 
+0

Спасибо за помощь! Это круто! – HCOOLH

Смежные вопросы