打印for循环迭代的最终值

时间:2015-02-09 21:07:44

标签: c for-loop

我在打印数组的最终值时遇到困难,以便提高进程的速度。所有变量都是全局的。 c是20位数组。在for循环中,调用functiona(k),其中某些公式应用于k的值。

目标:当k = 2 ^ 20-1时,我想只打印我的代码中所示的C数组的值。我尝试过使用if语句,但这不起作用。我有什么想法可以解决这个问题吗?

int main(void)
{
    for(k=0;k<=2^20-1;k++)
    {
        functiona(k);
        //printf("\n");
        if(k == 2^20-1)
        {
            printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d",
            c[19], c[18],c[17],c[16],c[15],c[14],c[13],
            c[12],c[11],c[10],c[9],c[8],c[7],c[6],
            c[5],c[4],c[3],c[2],c[1],c[0]);)
        }
    }

}

3 个答案:

答案 0 :(得分:0)

在您的代码中,在调用functiona(k);时,您按价值传递kfunctiona()对参数所做的任何更改都不会反映到k

顺便说一句,值得一提的是,^XOR运营商。不要把它误认为是指数。

另外,我想知道,如果你看一下operator precedence表,你会理解k<=2^20-1k == 2^20-1以某种完全不同的方式执行的方式你可能会想。

这里你需要的是pow()函数,正如其他人已经建议的那样。

也就是说,看起来for的另一个printf()循环可能对您有所帮助。

答案 1 :(得分:0)

当您打算使用指数时,您在if和for条件中使用xor运算符。

使用math.h&#39; pow函数代替:

if ((pow(2, 20) - 1) == k)

由于这是2的幂,你也可以使用位移

if (((2 << 19) - 1) == k)

正如有人在评论中指出的那样,你也可以这样写:

if (((1 << 20) - 1) == k)

请记住 - 不要忘记改变你的for循环条件!

答案 2 :(得分:0)

这个想法是你在循环时附加你想要的值,然后在循环结束时打印变量中的任何值。

我让循环从最大值变为0,但你也可以

str = functiona(k) + str + " ";

如果你愿意的话,如果你总是追加到最后,我会发现它更容易阅读。

int main(void)
{
    for(k<=2^20-1;k=0;k--)
    {

        strcat (str, strcat(functiona(k), " "));
    }
    printf(str)
}

编辑:哎呀,我读这个是Java哈哈。编辑strconcat。