1

我试图计算我的四个变量中有多少大于 0,所以我写了这些 if 语句来实现我的目的。所有数字将为正数或 0:

            if(a1>0){counter++;}
            if(a2>0){counter++;}
            if(a3>0){counter++;}
            if(a4>0){counter++;}

            printf("%d", counter);

很明显,如果要增加变量的数量,我会遇到一些麻烦。有没有更有效的方法来写这个?

感谢您花时间帮助我。

4

5 回答 5

6

如果你正在寻找一个单一的声明,

 counter+= (a1>0) + (a2>0) + (a3>0) + (a4>0);

应该做。如果您决定将数据打包到数组中,

#define SIZE(x) (sizeof(x)/sizeof*(x))
int x, a[4];
for(x=0; x<SIZE(a); x++)
    counter += (a[x]>0);

仍然相当紧凑。

于 2012-06-07T00:48:17.720 回答
5

从根本上说,您必须告诉编译器要检查哪个内存地址,以及将结果放在哪里。

如果您有很多局部变量,您可能需要考虑使用数组或类似的数据结构来保存它们,而不是大量单独声明的变量。在这种情况下,您也可以定义一个数组来保存计数器结果,并使用循环构造。

如果你没有大量的局部变量,我怀疑你当前的方法和它一样好(你可以通过在数组中放置一个指向每个变量的指针然后使用循环来获得幻想,但数组初始化将在至少与当前if声明一样繁琐)。

如果命名,我不会更改您的程序逻辑以使用数组,单个变量更自然。

于 2012-06-07T00:38:29.187 回答
3

如果你只是使用一个数组呢?像这样:

int a[4];
int counter;
int i; // iterator
for(i=0;i<4;i++){
    if(a[i]>0){
        counter++;
    }
}
printf("%d", counter);

那将是更快、更短的代码,但如果你必须有单独的变量,你的方法会尽可能高效。

于 2012-06-07T00:43:43.600 回答
0

使用数组而不是单独的变量。然后只需循环遍历数组。

于 2012-06-07T00:36:53.167 回答
0

如果所有变量都属于同一类型,则可以将指向它们的指针存储在数组中,并使用循环来检查和递增计数器。

于 2012-06-07T00:41:48.657 回答