我无法在排序时执行交换操作。当我这样做时,它会崩溃。为什么?

时间:2018-10-26 20:23:27

标签: c++ data-structures struct

struct Dates
{
    int day;
    int month;
    int year;
}accountinfo[3];

struct Accounts
{
    string name,lastname;
    int number;
    float balance;
}account[3];

void sortduetoaccnumbers()
{
    for (i=0;i<3;i++)
    {
        for (j=0;j<3;j++)
        {
            if (account[j].number>account[j+1].number)
            {
                //swap
            }
        }
    }
}
void sortduetodates()
{
    for (i=0;i<3;i++)
    {
        for (j=0;j<3;j++)
        {
            if (accountinfo[j].year>accountinfo[j+1].year)
            {
                //swap
            }
            else if (accountinfo[j].year==accountinfo[j+1].year)
            {
                if (accountinfo[j].month>accountinfo[j+1].month)
                {
                    //swap
                }
                else if (accountinfo[j].month==accountinfo[j+1].month)
                {
                    if (accountinfo[j].day>accountinfo[j+1].day)
                    {
                        //swap
                    }
                }
             }
        }
    }
}

我无法使用排序算法对这些帐户进行排序。如果我输入它们,它会崩溃。 cmd突然停止并完成程序。

我在注释行输入了交换功能。这样您就可以分析代码了。

除此功能外,其他所有功能均在工作。我被困在这一点上。

1 个答案:

答案 0 :(得分:7)

此代码是错误的: if (accountinfo[j].year>accountinfo[j+1].year) 因为如果j == 2,则j + 1 = 3-超过数组大小的索引=>未定义的行为(在您的情况下崩溃)

您需要将循环条件更改为j<2或重写支票