为什么我得到这个号码?

时间:2016-09-14 14:55:37

标签: c++ arrays

我正在尝试将两个数组合并为一个。但无法弄清楚为什么数字出来而不是所需数字,这个数字意味着什么。

#include<iostream>
#include<conio.h>

using namespace std;

void MergeArray(int[], int, int[], int,int[]);

void main()
{
    int A[50], m, B[50], n, C[100],a, mn;

    cout<<"Enter the size of First Array::\n";
    cin>>m;
    cout<<"Enter the First Array(ASCENDING ORDER)\n";
    for(int i=0; i<m ; i++)
        cin>>A[i];

    cout<<"Enter the size of Second Array::\n";
    cin>>n;
    cout<<"Enter the Second Array(DESCENDING ORDER) ::\n";
    for(int j=0; j<n; j++)
        cin>>B[j];

    mn=m+n;
    MergeArray(A,m,B,n,C);

    cout<<"The Array After merging is ::\n";
    for(int k=0; k < mn; k++ )
        cout<<C[k]<<"\n";
    cout<<"Press any key";
    cin>>a;

}


void MergeArray(int a[],int M , int b[], int N, int c[] )
{
    int x,y,z;
    z=0;

    for(x=0, y=N-1; x<M && y>=0;)
    {
        if(a[x]<=b[y])
            c[z++]=a[x++];

        else if(b[y]<a[x])
            c[z++]=b[y--];
    }

    if(x<M)
    {
        while(x<M)
            c[z++]=a[x++];
    }

    if(y>0)
    {
        while(y>=0)
            c[z++]=b[y++];

    }

    getch();

}

Image of the output screen}

2 个答案:

答案 0 :(得分:2)

我认为问题就在这里:

if(y>0)
{
    while(y>=0)
        c[z++]=b[y++];  // <-- y++ instead of y--

}

你应该减少y,而不是增加它。

答案 1 :(得分:0)

您会看到这个奇怪的数字,因为您打印的是未初始化的数组项。 你不必在这里处理第二个数组的最后一个元素。你还使用y的增量,但你应该使用减量。 而不是

if(y>0)
{
    while(y>=0)
        c[z++]=b[y++];

}

你应该使用

if(y>=0)
    {
        while(y>=0)
            c[z++]=b[y--];

    }