#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
连续两次 Ctrl+z
#3
Ctrl+z —— EOF 了,肯定会结束
#4
程序代码已经暗含了,要在正确的输入情况下,执行Ctrl+z 才有效
想让程序具有更多的容错功能,那就自己加了。。。
想让程序具有更多的容错功能,那就自己加了。。。
#5
我调试过 换行输入还是别的输入 我都试验过了..用过CTRL+Z但是还是无法结束..代码可以直接调试.请大家调试一下就知道了!~
#6
输入数字,然后回车。
再ctrl+z,再回车.
再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
连续两次 Ctrl+z
#3
Ctrl+z —— EOF 了,肯定会结束
#4
程序代码已经暗含了,要在正确的输入情况下,执行Ctrl+z 才有效
想让程序具有更多的容错功能,那就自己加了。。。
想让程序具有更多的容错功能,那就自己加了。。。
#5
我调试过 换行输入还是别的输入 我都试验过了..用过CTRL+Z但是还是无法结束..代码可以直接调试.请大家调试一下就知道了!~
#6
输入数字,然后回车。
再ctrl+z,再回车.
再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最后回车两次就可以了