数组[i + 1]具有与数组[i]相同的值,即使它不应该

时间:2014-01-23 21:21:46

标签: c arrays

我正在为一个作业制作一个代码,你应该制作一个程序来检查一对人可以在一行中看到彼此的数量,具体取决于他们的身高。我有一个看起来像这样的代码:

for( int in = 0; in < N-1; in++ )
{
    for( int index = 1; index < N; index++ )
    {
        if( C[in] >= C[in+index] && C[in+index] <= C[in+1+index]  )
        {
            num = num + 1;
        }
        if( C[in] < C[in+index] )
        {
            break;
        }
    }
}

C是一个数组,它保存行中所有人的高度。正如你所看到的,我从左到右检查两个人之间的人是否比他们之间的人更短或更高。如果那个人是,那么另外两个人可以看到彼此,并且我增加了可以看到彼此的人的数量。但是,有一些奇怪的事情正在发生。假设我的数组有3个元素,依次为2,1和3。应该有3对能够看到彼此(我自动添加在程序中稍早一点站在旁边的人),两对站在彼此旁边,高度为2的人和身高3的人。当你进入循环时,C [in]应该具有值2,C [in + index]应该具有值1并且C [in + index + 1]应该具有值3.但是,所有这些都具有值2.当我逐步执行循环时,唯一改变的是当in ++部分从第一个for循环发生时C [in]值发生变化。

我不知道发生了什么,在我脑海里,这一切都应该有效。我对编程很陌生,所以请彻底解释,不要讨厌编程,这是我能想到的最好方法。 :P

感谢您的帮助! :d

编辑:忘记提及N代表该行中的人数。

2 个答案:

答案 0 :(得分:1)

你的循环边界是错误的:inindex都会到达数组的末尾,但你将它们的和作为C[in+index]中的索引。这将在某个时刻读取数组的末尾,调用未定义的行为。解决此问题,看看问题是否消失。

除了:
我强烈建议你为变量使用更多的说话名称。没有人读到这个名字C会知道这是一个应该保持人们身高的数组......更好的称之为personHeights,这也不是很富有想象力,但至少它给读者一些提示。

答案 1 :(得分:0)

不是答案,但评论太大/太尴尬。

建议在in + 1开始内循环 在内循环中使用index而不是in + index

for( int in = 0; in < N-1; in++ ) {
    // for( int index = 1; index < N; index++ )
    for( int index = in + 1; index < N; index++ )
    {
        // if( C[in] >= C[in+index] && C[in+index] <= C[in+1+index]  )
        // Also needs special handling when index is N-1
        if( C[in] >= C[index] && C[in] <= C[index+1]  )
        {
            num = num + 1;
        }
        // if( C[in] < C[in+index] )
        if( C[in] < C[index] )
        {
            break;
        }
    }
}