打印 for 循环迭代的最终值
Printing the final value of the iteration of a 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]);)
}
}
}
在您的代码中,当调用 functiona(k);
时,您正在按值传递 k
。 functiona()
对参数所做的任何更改都不会反映到 k
。
顺便说一句,值得一提的是,^
是 XOR
运算符。不要把它误认为是指数。
此外,我想知道,如果你看一下 operator precedence table,你就会明白,k<=2^20-1
或 k == 2^20-1
完全被执行的方式和你想的不一样。
也许您在这里需要的是 pow()
功能,正如其他人已经建议的那样。
也就是说,printf()
的另一个 for
循环可能对您很有帮助。
当您打算使用指数时,您在 if 和 for 条件中使用了 xor 运算符。
改用math.h的pow
函数:
if ((pow(2, 20) - 1) == k)
因为这是2的幂,你也可以使用位移
if (((2 << 19) - 1) == k)
正如评论中有人指出的那样,您也可以将上面的内容写成这样:
if (((1 << 20) - 1) == k)
记住——别忘了也更改 for 循环的条件!
想法是在循环时附加所需的值,然后在循环结束时打印变量中的任何内容。
我让循环从最大值变为 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。
我在打印数组的最终值以提高处理速度时遇到困难。所有变量都是全局的。 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]);)
}
}
}
在您的代码中,当调用 functiona(k);
时,您正在按值传递 k
。 functiona()
对参数所做的任何更改都不会反映到 k
。
顺便说一句,值得一提的是,^
是 XOR
运算符。不要把它误认为是指数。
此外,我想知道,如果你看一下 operator precedence table,你就会明白,k<=2^20-1
或 k == 2^20-1
完全被执行的方式和你想的不一样。
也许您在这里需要的是 pow()
功能,正如其他人已经建议的那样。
也就是说,printf()
的另一个 for
循环可能对您很有帮助。
当您打算使用指数时,您在 if 和 for 条件中使用了 xor 运算符。
改用math.h的pow
函数:
if ((pow(2, 20) - 1) == k)
因为这是2的幂,你也可以使用位移
if (((2 << 19) - 1) == k)
正如评论中有人指出的那样,您也可以将上面的内容写成这样:
if (((1 << 20) - 1) == k)
记住——别忘了也更改 for 循环的条件!
想法是在循环时附加所需的值,然后在循环结束时打印变量中的任何内容。
我让循环从最大值变为 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。