为什么我的代码在添加不相关的代码行后工作方式不同?
Why my code works different after adding a non-relevant line of code?
我想得到数组中三个最大数字的总和。按升序对它们进行排序后,我只需将最后三个相加即可得到结果。这是有趣的事情发生的时候 - 我的注释代码在计算总和之前测试了排序,实际上是使代码正确的原因。当我删除/评论它时,答案会有所不同。
然后,我尝试只打印 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......我想这超出了你的问题范围。
相关文章:
- 注释一行使代码工作,而没有它,代码不起作用
- 当我的代码工作正常时,为什么在SPOJ中遇到运行时(Sigabrt)错误
- 回文字符串问题:为什么我必须放+1而不是-1才能让这个代码工作
- 如何使用模板或继承使以下代码工作
- 为什么这个循环运行不可见的代码?工作不正常
- 堆叠C++代码工作正常,但在运行代码结束时"glibc detected"
- 返回引用 - 为什么我的代码工作正常?不应该
- 如何使此代码工作
- 为什么这个单例类代码工作正常
- 对于下面的代码,我将 decltype(s1.size()) 更改为 int,代码工作正常.在这种情况下,decltyp
- 代码工作到一定程度,然后崩溃
- 为什么此代码工作/失败取决于在中创建的范围闭包
- OpenGL代码工作,不管我使用什么输入/窗口处理程序
- c++代码工作正常,但进程以termination结束,而不是返回0
- 为什么代码工作良好,当我编译和运行它,即使我没有提到数组的大小
- 如果元素不能为代码工作
- 为什么这段代码工作正常?(vector.clear(), vector<vector<int> >)
- C++ 昨天分段错误测试的代码工作完美,现在它出错了
- 由于在返回语句中使用了布尔或操作,因此递归如何对以下代码工作
- C /c++ hackerrank,我的代码是工作的,但我得到0.38 /10分(不知道为什么)代码工作