在数组中对整数排序。但它在某些情况下不起作用

时间:2019-07-03 11:32:25

标签: c++

因此,我将其编写为在代码升序时打印“是”,而在代码不升序时打印“否”。但是如果我从头开始使用相等的值,则程序将打印错误的结果。不明白为什么即使不满足条件也要运行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;
}

1 个答案:

答案 0 :(得分:1)

一个偶然的错误,您跳过数组的第一个元素,而跳过最后一个元素。如果您的数组包含N个元素,则其范围将从array[0]array[N-1]。在此更改:

for(i = 1; i <= N; i++){

在这里:

for(i = 0; i < N; i++){

您在其中进行检查的第二个for(i = 1; i <= N; i++)可以从1开始,因为您在其中查看arr[i - 1],但是它应该是i < N而不是i <= N但是。

此外,int arr[N];在C ++中不起作用(某些编译器会容忍它,但并非所有人都能容忍)。尝试使用std::vector<int> arr(N);