插入从小到大的整型数组

来源:互联网 发布:淘宝首页轮播图位置 编辑:程序博客网 时间:2024/05/22 06:22

老师给的一个题目,就是给定一整型数组,已经从小到大排列,然后插入一整数,要求插入的位置使得元素还是按照从小到大的顺序排列,一下是代码,不过有一点小问题,值得注意

# include<iostream>using namespace std;# define MAXLEN 30int main(){    int arr[MAXLEN] = {0};    cout << "请按照从小到大的顺序依次输入整数,按回车,Ctrl+Z再加回车结         束输入,中间不要按其他任何按键" << endl;    int Len = 0;    while (cin>>arr[Len])    {        Len++;    }    cin.clear();//ctrl加z会是流失效,相当于eof,fail,用cin.clear就行    int iInsert;     cout <<"请输入要插入的整数:";    cin >> iInsert;    int i, j;    //如果插入的数最小    if (iInsert <= arr[0])    {        for (i = Len ; i >= 1; i--)        {            arr[i] = arr[i - 1];        }        arr[0] = iInsert;        Len += 1;    }    //如果插入的数最大    else if (iInsert >= arr[Len - 1])    {        arr[Len] = iInsert;        Len += 1;    }    //插入的数在中间    else {        for (i = 0; i < Len; i++)        {            if (arr[i] <= iInsert&&iInsert < arr[i + 1])                break;//到这里就退出循环        }        //要在i+1处插入        for (j = Len ; j >= i + 2; j--)        {            arr[j] = arr[j - 1];        }        arr[i+1] = iInsert;        Len += 1;    }    cout << "插入后数组为:" << endl;    for (i = 0; i < Len; i++)        cout << arr[i] << " ";    cout << endl;    return 0;}

之前没有加cin.clear(),结果就是直接跳过cin>>iInsert了,因为流到了结尾了(Ctrl+z),所以要重新将流设置为有效,而且输入结束必须是这样做的,如果不想输入数据了,按回车,再按Ctrl+z,再按回车

0 0
原创粉丝点击