c++ - 当我没有调用两次时,输出如何显示两次?

标签 c++

<分区>

这是用turbo c++写的一些排序方法的代码(我知道写的程序方法很老)我在冒泡排序的上升部分有问题。显然这2个函数是连接的(我调试过)和所以这个函数被调用了两次,我不知道为什么。 你能告诉我原因吗 这是代码:

#include<iostream.h>
#include<conio.h>
#include<limits.h>
void display(int ar[],int sz)
{
    cout<<"Displaying arranged array\n";
    for(int i=1;i<sz;++i)
    cout<<ar[i]<<'\n';
}
void selectasd(int ar[],int sz)
{
    for(int i=1;i+1<sz;++i)
        for(int j=i+1,p=i;j<sz;++j)
            if(ar[j]<ar[p])
            {
                p=j;
                ar[i]+=ar[p];
                ar[p]=ar[i]-ar[p];
                ar[i]-=ar[p];
            }
}
void selectdsd(int ar[],int sz)
{
    for(int q=1;q+1<sz;++q)
        for(int w=q+1,p=q;w<sz;++w)
            if(ar[w]>ar[p])
            {
                p=w;
                ar[q]+=ar[p];
                ar[p]=ar[q]-ar[p];
                ar[q]-=ar[p];
            }
}
void insertasd(int arr[],int sz)
{
    arr[0]=INT_MIN;
    for(int x=2;x<sz;++x)
    {
        int tmp=arr[x];
        int k=x-1;
        while(tmp<arr[k])
        {
            arr[k+1]=arr[k];
            k--;
        }
        arr[k+1]=tmp;
    }
}
void insertdsd(int ar[],int sz)
{
    ar[0]=INT_MAX;
    for(int q=2;q<sz;++q)
    {
        int temp=ar[q];
        int k=q-1;
        while(temp>ar[k])
        {
            ar[k+1]=ar[k];
            k--;
        }
        ar[k+1]=temp;
    }
}
void bubsrtdd(int ar[],int sz)
{
    for(int q=1;q+1<sz;++q)
        for(int w=1;w+1<sz;++w)
            if(ar[w]<ar[w+1])
            {
                ar[w]+=ar[w+1];
                ar[w+1]=ar[w]-ar[w+1];
                ar[w]-=ar[w+1];
            }
}
void bubsrtad(int ar[],int sz)
{
    for(int q=1;q+1<sz;++q)
    {
        for(int w=1;w+1<sz;++w)
        {
            if(ar[w]>ar[w+1])
            {
                ar[w+1]+=ar[w];
                ar[w]=ar[w+1]-ar[w];
                ar[w+1]-=ar[w];
            }
        }
    }
}


int main()
{
    clrscr();
    int ar[20],size;
    cout<<"This is a program to arrange arrays using selection sort\nInsert the size of the array\n";
    cin>>size;
    size++;
    cout<<"Enter the elements\n";
    for(int q=1;q<size;++q)
        cin>>ar[q];
    cout<<"Menu:\n1.Selection sort\n2.Insertion sort\n3.Bubblesort\n";
    cin>>q;
    switch(q)
    {
        case 1:
            cout<<"Would you like to display it arranged in\n1.Ascending order\n2.Descending order\n";
            cin>>q;
            switch(q)
            {
                case 1:
                    selectasd(ar,size);
                    display(ar,size);
                    break;
                case 2:
                    selectdsd(ar,size);
                    display(ar,size);
                    break;
                default:cout<<"\nInvalid choice\n";
            }
            break;
        case 2:
            cout<<"Would you like to display it arraged in\n1.Ascending order\n2.Descending order\n";
            cin>>q;
            switch(q)
            {
                case 1:
                    insertasd(ar,size);
                    display(ar,size);
                    break;
                case 2:
                    insertdsd(ar,size);
                    display(ar,size);
                    break;
                default:cout<<"\nInvalid choice\n";
            }
            break;
        case 3: {
                cout<<"Would you like to display the array in \n1.ascending order \n2.descending order\n";
                cin>>q;
                switch(q)
                {
                    case 1: {
                        bubsrtad(ar,size);                      display(ar,size);
                        display(ar,size);
                        break;
                        }
                    case 2: {
                        bubsrtdd(ar,size);
                        display(ar,size);
                        break;
                        }
                    default:cout<<"\nINVALID CHOICE\n";
                }
            }
            break;
        default:cout<<"\nInvalid choice\n";
    }
    getch();
    return 0;
}

最佳答案

在我看来,你在这里调用了两次显示:

    case 3: {
            cout<<"Would you like to display the array in \n1.ascending order \n2.descending order\n";
            cin>>q;
            switch(q)
            {
                case 1: {
                    bubsrtad(ar,size);                      display(ar,size);
                    display(ar,size);
                    break;
                    }

关于c++ - 当我没有调用两次时,输出如何显示两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21691620/

相关文章:

c++ - 为指针分配内存的问题

c++ - 在 C/C++ 的 ODBC 程序中找不到 SQL.H 和 SQLEXT.H

c++ - Clion 的调试器正在运行程序,但常规控制台却没有。

c++ - 如何在 vim 中将 C 风格转换为 C++ 风格转换

c++ - 具有 WinAPI 的真正 transient 窗口?

c++ - 在 deadline_timer 等待时使用 io_service::post (boost)

c++ - 有没有办法使类递归?

c++ - 为什么那个纯虚函数不能内联?

c++ - std 替代 boost::this_thread_interruption_point

c++ - R 矩阵到 Armadillo 的转换真的很慢