【发布时间】:2019-07-03 11:32:25
【问题描述】:
所以我写了这个来打印“是的,当代码按升序排列时,”不是“。但如果我一开始就以相等的值开始,程序会打印一个不正确的结果。我不'不明白为什么即使不满足条件,if 语句也会运行。
#include <iostream>
using namespace std;
int main()
{
int N, i;
scanf("%d", &N);
int arr[N];
for(i = 1; i <= N; i++)
{
scanf("%d", &arr[i - 1]);
}
for(i = 1; i <= N; i++)
{
if(arr[i - 1] > arr[i])
{
printf("No");
return 0;
}
}
printf("Yes");
return 0;
}
【问题讨论】:
-
arr[i]在i == N的最后一次迭代中访问数组越界。 -
您的检查循环一直到
i <= N超出范围。 -
fwiw,有
std::is_sorted。这是练习吗? -
另请注意,非常量大小的数组不在标准 C++ 中,并且不适用于某些编译器。考虑改用
std::vector。 -
int arr[N];-- 你的程序不会对任何东西进行排序,因为这在 C++ 中是不允许的。