vector对象使用while循环如何结束输入?内附代码!~~

时间:2021-12-31 15:58:42

#include "iostream"
#include "vector"
using  namespace std;
int main()
{
vector<int> ivec;
int ival;
cout<<"Enter numbers(Ctrl+z to end):"<<endl;
while(cin>>ival)
ivec.push_back(ival);
if(ivec.size()==0)
{
cout<<"No element?!"<<endl;
}
cout<<"Sum of each pair of adjacent elements in the vector:"<<endl;
for(vector<int>::size_type ix=0;ix<ivec.size()-1;ix=ix=2)
{
cout<<ivec[ix]+ivec[ix+1]<<"\t";
cout<<endl;
}
if(ivec.size()%2!=0)
cout<<endl
<<"The lash element is not been summed"
<<"and its value is"
<<ivec[ivec.size()-1]<<endl;
return 0;
}


输入一组整形数据到这个VECTOR的对象  计算每两个元素的和! 我在C++primer的习题解看到这个题目
他用的是 while循环.我找不到结束循环体的语句..编译时没问题的.请问这段代码在vc++的环境下编译之后 怎么结束输入.
我使用过一个字符型的数据之后 他就死循环的输出7 !我尝试过 Ctrl+z结束 无法结束..

11 个解决方案

#1


 试了下、、Ctrl+z回车下结束了啊

#2


ix=ix=2--->ix = ix + 2
连续两次 Ctrl+z

#3


Ctrl+z —— EOF 了,肯定会结束

#4


程序代码已经暗含了,要在正确的输入情况下,执行Ctrl+z 才有效

想让程序具有更多的容错功能,那就自己加了。。。

#5


我调试过 换行输入还是别的输入 我都试验过了..用过CTRL+Z但是还是无法结束..代码可以直接调试.请大家调试一下就知道了!~

#6


输入数字,然后回车。
再ctrl+z,再回车.

#7


试过了,我用的是vc6.0,一直这种结束输入的都要在输入结束后回车 Ctrl+z再回车 再Ctrl+z才能结束,当时也纳闷,后来程序能正常运行就没管是几个Ctrl+z了,楼主你试试,说不定可以

#8


楼主问题不在于while循环退不出来,事实上Ctrl+Z便已经退出while了;问题在于for循环,根本没有退出条件,因为楼主写的是ix=ix=2,把+写成了=,这便是错误的地方(应该是ix=ix+2)。
而且,其他还有一些小问题,比如该不该防止越界什么的……

#9


#include "iostream"
#include "vector"
using  namespace std;
int main()
{
    vector<int> ivec;
    int ival;
    cout<<"Enter numbers(Ctrl+z to end):"<<endl;
    while(cin>>ival)
        ivec.push_back(ival);
    if(ivec.size()==0)
    {
        cout<<"No element?!"<<endl;
    }
    cout<<"Sum of each pair of adjacent elements in the vector:"<<endl;
    for(vector<int>::size_type ix=0;ix<ivec.size()-1;ix += 2)  //mark
    {
        cout<<ivec[ix]+ivec[ix+1]<<"\t";
        cout<<endl;
    }
    if(ivec.size()%2!=0)
        cout<<endl
        <<"The lash element is not been summed"
        <<"and its value is"
        <<ivec[ivec.size()-1]<<endl;
    return 0;
}

只改了一个地方
循环结束条件是输入完数据后回车 然后 ctrl + z 然后回车就结束了

#10


 for(vector<int>::size_type ix=0;ix<ivec.size()-1;ix += 2)  //mark
    {
        cout<<ivec[ix]+ivec[ix+1]<<"\t";
        cout<<endl;
    }

我不知道你这里是什么用意?
你既然已经“\t”了为什么还要换行用endl?
多此一举啊?
如果想用\t即\t,想换行就换行,没必要两个都写吧。
建议去掉一个。

#11


我做了这个题,就是先回车然后ctrl+z最后回车两次就可以了

#1


 试了下、、Ctrl+z回车下结束了啊

#2


ix=ix=2--->ix = ix + 2
连续两次 Ctrl+z

#3


Ctrl+z —— EOF 了,肯定会结束

#4


程序代码已经暗含了,要在正确的输入情况下,执行Ctrl+z 才有效

想让程序具有更多的容错功能,那就自己加了。。。

#5


我调试过 换行输入还是别的输入 我都试验过了..用过CTRL+Z但是还是无法结束..代码可以直接调试.请大家调试一下就知道了!~

#6


输入数字,然后回车。
再ctrl+z,再回车.

#7


试过了,我用的是vc6.0,一直这种结束输入的都要在输入结束后回车 Ctrl+z再回车 再Ctrl+z才能结束,当时也纳闷,后来程序能正常运行就没管是几个Ctrl+z了,楼主你试试,说不定可以

#8


楼主问题不在于while循环退不出来,事实上Ctrl+Z便已经退出while了;问题在于for循环,根本没有退出条件,因为楼主写的是ix=ix=2,把+写成了=,这便是错误的地方(应该是ix=ix+2)。
而且,其他还有一些小问题,比如该不该防止越界什么的……

#9


#include "iostream"
#include "vector"
using  namespace std;
int main()
{
    vector<int> ivec;
    int ival;
    cout<<"Enter numbers(Ctrl+z to end):"<<endl;
    while(cin>>ival)
        ivec.push_back(ival);
    if(ivec.size()==0)
    {
        cout<<"No element?!"<<endl;
    }
    cout<<"Sum of each pair of adjacent elements in the vector:"<<endl;
    for(vector<int>::size_type ix=0;ix<ivec.size()-1;ix += 2)  //mark
    {
        cout<<ivec[ix]+ivec[ix+1]<<"\t";
        cout<<endl;
    }
    if(ivec.size()%2!=0)
        cout<<endl
        <<"The lash element is not been summed"
        <<"and its value is"
        <<ivec[ivec.size()-1]<<endl;
    return 0;
}

只改了一个地方
循环结束条件是输入完数据后回车 然后 ctrl + z 然后回车就结束了

#10


 for(vector<int>::size_type ix=0;ix<ivec.size()-1;ix += 2)  //mark
    {
        cout<<ivec[ix]+ivec[ix+1]<<"\t";
        cout<<endl;
    }

我不知道你这里是什么用意?
你既然已经“\t”了为什么还要换行用endl?
多此一举啊?
如果想用\t即\t,想换行就换行,没必要两个都写吧。
建议去掉一个。

#11


我做了这个题,就是先回车然后ctrl+z最后回车两次就可以了