如果将最后的num1,num2和0分配给if块,为什么还要执行block?

时间:2016-08-19 15:50:47

标签: c if-statement variable-assignment

在此代码中

#include <stdio.h>
int main(){
    int i;

    if(i= 50,40)
        printf(" if blk i %d\n",i);
    else
        printf(" else part" );



    return 0;
}

输出为

  

如果blk我50

但是当if语句中的赋值部分添加零时,它将转到else部分。为什么这个0会转到其他部分?

以下代码:

#include <stdio.h>
int main(){
    int i;

    if(i= 50,40,0)
        printf(" if blk i %d\n",i);
    else
        printf(" else blk i %d\n", i);

    printf("i %d\n", i);

    return 0;
}

3 个答案:

答案 0 :(得分:4)

这句话:

ko.bindingHandlers.option = {
    update: function(element, valueAccessor) {
       var value = ko.utils.unwrapObservable(valueAccessor());
       ko.selectExtensions.writeValue(element, value);   
    }        
};

var mainView = function()
{
    this.ts = new testSelect("");
  this.ts2 = new testSelect2();
}


function testGroup(label, children) {
    this.label = ko.observable(label);
    this.children = ko.observableArray(children);
}

function testOption(label, property) {
    this.label = ko.observable(label);
    this.value = ko.observable(property);
}

function testGroup2(label, children) {
    this.label = ko.observable(label);
    this.children = ko.observableArray(children);
}

function testOption2(label, property) {
    this.label = ko.observable(label);
    this.value = ko.observable(property);
}


function testSelect2(content,selectedValue)
{
        //alert(content);
        this.groups2 = ko.observableArray();
    if(content == 1)
    {
        this.groups2.push(new testGroup("Letters",[new testOption("C","3"),new testOption("D","4")]));
      console.debug(groups2());
    }
    else if(content == 2)
    {
        this.groups2.push(new testGroup2("Letters",[new testOption2("E","5"),new testOption2("F","6")]));

    }

    this.selectedOption = ko.observable(selectedValue);
    this.specialProperty = ko.computed(function(){
        var selected = this.selectedOption();
        return selected ? selected : 'unknown';
    }, this);
}

var testSelect = function(selectedValue) 
{
    this.groups = ko.observableArray();
    this.groups.push(new testGroup("Letters",[new testOption("A","1"),new testOption("B","2")]));


    this.selectedOption = ko.observable(selectedValue);
  this.specialProperty = ko.computed(function(){
        var selected = this.selectedOption();
        return selected ? selected : 'unknown';
    }, this);

    this.selectedOption.subscribe(function(newValue)
  {
    if(newValue != -1)
    {
        alert(newValue);
      testSelect2(newValue);
    }
  });
};
ko.applyBindings(new mainView());

实际上是:

for dividend in dividend_data:
    for index in (1,3,4,5):
        date = dividend[index]
        dividend[index] = datetime.strptime(date, '%m/%d/%Y').strftime("%Y-%m-%d")

逗号运算符导致第一个if(i= 50,40) 被赋值为50(逗号运算符的优先级低于赋值),然后作为条件使用最后一个元素if(40)

  

但是当在if语句中将赋值部分添加到零时,它将转到else部分。

因为条件是使用最后一个元素i40导致0失败,并执行else阻止。

答案 1 :(得分:3)

您正在使用逗号运算符。使用此运算符的表达式的值是右侧的值。

在这种情况下:

var intervalId = null;
var x = 0;
intervalId = setInterval(crunchifyAjax, 100);

function crunchifyAjax() {
    if (x < 10) {
        x++;
        console.log(x);
        return true;
    }
    clearInterval(intervalId, crunchifyAjax);
}

(i= 50,40) 首先设置为50,然后计算值40,因此表达式的值为40.因为这是一个非零值,所以它在布尔上下文中求值为true并输入{ {1}}部分。

在这种情况下:

i

与上面相同,但是然后评估0,因此表达式的值为0.零在布尔上下文中计算为false,因此它进入if部分。

答案 2 :(得分:1)

表达式a, b首先评估a并抛弃结果 然后它评估b,该值是表达式的结果。

i= 50,40首先评估i = 50,然后生成40作为结果 由于40不是0,因此条件转换为true

i = 50, 40, 0评估i = 50,然后评估40,然后评估0,这将成为表达式的值。
0转换为false

另一方面,

i = (50,40)会将40分配给i并完全忽略50