C++primer的一道课后题,结果之后出现很多乱码,求指教

silferlee 2011-10-17 09:45:57
C++PRIMER课后习题3.13:
读取一组整数到vector对象,计算并输出每对相邻元素的和。如果读入的元素为奇数,则提示用户最后一个元素没有求和,并且输出其值。(编译环境VC6)
源代码如下:

#include<iostream>
#include<vector>
using namespace std;

int main(){
vector<int> ivec;
int ival=0;
while(cin>>ival){
ivec.push_back(ival);
}
if((ivec.size())%2==0){
for(vector<int>::size_type ix=0;ix!=ivec.size()-1;ix=ix+2){
cout<<(ivec[ix]+ivec[ix+1])<<"\t";
}
}
else if((ivec.size())%2!=0){
for(vector<int>::size_type iy=0;iy!=ivec.size()-2;iy=iy+2){
cout<<(ivec[iy]+ivec[iy+1])<<"\t";
}
cout<<"the last element is not added,it is:"<<ivec[ivec.size()-1]<<endl;
}
return 0;
}

运行结果如下:
输入:1 2 3 4^Z ENTER ^Z ENTER
输出:3 7 -606348326 -1145324614 1937022284.。。。后面还有好多大数字,不知道什么含义,前面的3,7 是对的,求指教这是什么原因?
输入:1 2 3 4^Z ENTER ^Z ENTER
输出:3 之后也是不知道的含义的大数字,然后要打印的最后一个数字(未求和的)也没有输出,求大侠视指教?
...全文
84 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ningto.com 2011-10-17
  • 打赏
  • 举报
回复
假如输入的元素个数为4
进入第一个if
ix = 0, 0 != 3, ix = ix + 2;
ix = 2, 2 != 3, ix = ix + 2;
ix = 4, 4 != 3, ix = ix + 2;
所以ix!=ivec.size()-1 一直为真
silferlee 2011-10-17
  • 打赏
  • 举报
回复
确实是地址越界了,我吧!=改为<就好了,
我刚开始也觉得奇怪为什么要用!=呢,我以前学C语言出身的,还以为是什么好习惯呢
多谢大侠!

[Quote=引用 5 楼 johnpher 的回复:]

向量访问越界了!
循环控制条件用 != 有问题,你这里可能会出现大于的情况。
[/Quote]
maozhihui52102 2011-10-17
  • 打赏
  • 举报
回复
for(vector<int>::size_type ix=0;ix<ivec.size()-1;ix=ix+2),给分吧,LZ
silferlee 2011-10-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 linuxbirdman 的回复:]

while(cin>>ival){
ivec.push_back(ival);
}
应该跟你循环输入,以及终止输入,所输入的结束符有关系
[/Quote]
我用的VC6环境,结束表示是两次^z+ENTER,我测试了别的小程序,没有问题啊
JiangXiang 2011-10-17
  • 打赏
  • 举报
回复
向量访问越界了!
循环控制条件用 != 有问题,你这里可能会出现大于的情况。
silferlee 2011-10-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 maozhihui52102 的回复:]

数组越界, for(vector<int>::size_type ix=0;ix!=ivec.size()-1;ix=ix+2)最好不要用!=这种魔数,
[/Quote]
应该怎么改呢?
将ivec.size()-1赋值给一个变量?然后将该变量放在for循环中?
maozhihui52102 2011-10-17
  • 打赏
  • 举报
回复
数组越界, for(vector<int>::size_type ix=0;ix!=ivec.size()-1;ix=ix+2)最好不要用!=这种魔数,
yby4769250 2011-10-17
  • 打赏
  • 举报
回复
while(cin>>ival){
ivec.push_back(ival);
}
这样写不只能行不行,估计问题就出在这里,输入^Z ENTER后不知道cin会返回什么值,你测试看看
LinuxBirdMan 2011-10-17
  • 打赏
  • 举报
回复
while(cin>>ival){
ivec.push_back(ival);
}
应该跟你循环输入,以及终止输入,所输入的结束符有关系

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧