排序时我无法进行交换操作.当我这样做时它会崩溃.为什么?

-2 c++ struct data-structures

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
                    }
                }
             }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

我进入了一个评论行,交换函数必须去.所以你可以分析代码.

除此之外,其他所有功能都在工作.我陷入了困境.

nik*_*016 7

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

你需要改变循环条件j<2或重写你的支票

  • 值得注意的是,在整个发布的消息来源中重复出现同样的错误. (3认同)