为什么我的代码在添加不相关的代码行后工作方式不同?

Why my code works different after adding a non-relevant line of code?

本文关键字:代码 工作 方式不 我的 添加 不相关 为什么      更新时间:2023-10-16

我想得到数组中三个最大数字的总和。按升序对它们进行排序后,我只需将最后三个相加即可得到结果。这是有趣的事情发生的时候 - 我的注释代码在计算总和之前测试了排序,实际上是使代码正确的原因。当我删除/评论它时,答案会有所不同。

然后,我尝试只打印 n,它再次工作正常,并且在注释之后,结果再次错误地更改。

int main()
{
int n;
cout<<"n: ";
cin>>n;
int a[n-1];
for(int i=0;i<n;i++)
{
cin>>a[i];
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n-i;j++)
{
if(a[j]>a[j+1])
{
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
/*
for(int i=0;i<n;i++)
{
cout<<a[i]<<" ";
}
*/
cout<<endl;
//cout<<n<<endl;
int ourSum = a[n-1] + a[n-2] + a[n-3];
if(n>2)cout<<"The sum of the 3 biggest is "<<ourSum<<endl;
else cout<<"Need at least three numbers"<<endl;

使用打印周期或 n 打印: n: 6 654321 1 2 3 4 5 6 3 个最大之和是 15

没有上面目前评论的内容: n: 6 654321 3 个最大的之和是 12

因此,当评论处于活动状态时,答案会正确显示:15.但是,当它们被评论/删除时,结果是 12。我不知道是什么原因造成的,所以我很感激在这里解释一下。

int a[n-1];
for(int i=0;i<n;i++)
{
cin>>a[i];
}

您分配的内存比实际使用的内存少。时期。这是一种不确定的行为,享受你的鼻腔。自从你进入UB的世界以来,一切都可以观察到......

定位n整数,而不是n-1

我不会批评您重新实现气泡排序的尝试,即使与规范气泡排序实现相比,它也是低效的,事实上,如果 n 小于 3,您将获得另一个 UB......我想这超出了你的问题范围。