C 存储数组的子集
该程序正在“计算”阵列源的所有子集。我需要将结果值存储在另一个名为polje的2D字段中。如果我只是使用printf(“%d%d%d”,source[I][0],source[I][1],source[I][2])代码>代码工作正常,但当它试图将所有内容复制到结果字段中时,某些操作失败。我想我在数组polje的索引中出错了 但事实是:C 存储数组的子集,c,arrays,subset,C,Arrays,Subset,该程序正在“计算”阵列源的所有子集。我需要将结果值存储在另一个名为polje的2D字段中。如果我只是使用printf(“%d%d%d”,source[I][0],source[I][1],source[I][2])代码工作正常,但当它试图将所有内容复制到结果字段中时,某些操作失败。我想我在数组polje的索引中出错了 但事实是: 0 3 5 3 4 2 3 4 2 0 0 0 *0 0 0* 0 0 0 0 0 0 0 0 0 我想你只是有一个逻辑错误。循环的骨架是: currentSubs
0 3 5
3 4 2
3 4 2
0 0 0
*0 0 0*
0 0 0
0 0 0
0 0 0
我想你只是有一个逻辑错误。循环的骨架是:
currentSubset = 3;
while ( currentSubset )
{
// ...
polje[currentSubset][...] = ...;
// ...
currentSubset--;
}
因此,除了前三行之外,您永远不会写入任何行。
tmp
是一个只有两位的位掩码,因此内部循环应该是(i=0;i<2;i++)的
另外,进入polje
数组的正确索引是polje[currentSubset*2+i][0]
,因为polje
中的每个子集
占用两个空格,i
为0或1。int-tmp;虽然(currentSubset){tmp=currentSubset;
对我来说是一种糟糕的风格。可以做得更简单一些吗。哦,是的,现在很明显,关于如何存储数组有什么想法吗?确保你可以手工完成你想要的算法(例如,在纸上,或者在你的头脑中)。然后将其分解为您希望您的程序执行的小步骤列表;然后检查您的程序是否执行了这些步骤。
0 3 5
3 4 2
3 4 2
0 0 0
*0 0 0*
0 0 0
0 0 0
0 0 0
currentSubset = 3;
while ( currentSubset )
{
// ...
polje[currentSubset][...] = ...;
// ...
currentSubset--;
}