求中位数的C++程序编译时发生错误

雨夜独行的人 2014-06-07 08:49:49
我写了一个求中位数的C++小程序,代码如下:
#include<iostream>
#include<string>
#include<vector>
#include <algorithm>
#include<cmath>
using namespace std;
inline void keep_window_open(){ char ch; cin >> ch; }
int main()
{
vector<double>numbers;
double number;
while (cin>>number)
{
numbers.push_back(number);
sort(numbers.begin(), numbers.end());
if (numbers.size()%2==0)
{
cout << "The median of the numbers is " << (numbers[numbers.size() / 2] + numbers[numbers.size() / 2 + 1]) / 2 << "."<<endl;
}
if (numbers.size()%2==1)
{
cout << "The median of the numbers is " << numbers[numbers.size() / 2+1] << "." << endl;
}
}
}

编译时弹出了如下提示:

我是第一次遇到这种状况。我用的IDE是VS2013。请问该如何解决?
谢谢!
...全文
238 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
雨夜独行的人 2014-06-10
  • 打赏
  • 举报
回复
[
引用 7 楼 xacbeyond 的回复:
[quote=引用 6 楼 buyong 的回复:] 1. 这是运行错误,不是编译错误 2. 程序逻辑有问题,while中输入和计算在一起?难道想输入一个就计算一遍?
不对啊……cin的目的难道不是将输入的每个数填入向量中吗?并不是输入一个就计算一遍啊![/quote] 我明白您的意思了!谢谢!!
雨夜独行的人 2014-06-09
  • 打赏
  • 举报
回复
引用 6 楼 buyong 的回复:
1. 这是运行错误,不是编译错误 2. 程序逻辑有问题,while中输入和计算在一起?难道想输入一个就计算一遍?
不对啊……cin的目的难道不是将输入的每个数填入向量中吗?并不是输入一个就计算一遍啊!
buyong 2014-06-09
  • 打赏
  • 举报
回复
1. 这是运行错误,不是编译错误 2. 程序逻辑有问题,while中输入和计算在一起?难道想输入一个就计算一遍?
modyaj 2014-06-09
  • 打赏
  • 举报
回复
引用 4 楼 xacbeyond 的回复:
[quote=引用 2 楼 modyaj 的回复:] 明显的 用数组下表访问时候越界了 比如 numbers.size() 等于2的时候 numbers[numbers.size() / 2 + 1]) = nmbers[2] 就不存在
假如我输入了两个数,1和2,那么numbers[numbers.size() / 2 + 1]) = nmbers[2]所表示的不就是第二个元素2吗?请问是我理解错了吗? 什么叫做越界,您能稍微详细地讲一下吗? 谢谢![/quote] 数组是从0开始算的 第一个数nmbers[0],第二个数是nmbers[1],到目前为止nmbers[2]不存在,内存也没为他分配空间,此时所说的越界就是超过了nmbers[1]的,比如nmbers[2]、nmbers[3]之类的
雨夜独行的人 2014-06-09
  • 打赏
  • 举报
回复
引用 2 楼 modyaj 的回复:
明显的 用数组下表访问时候越界了 比如 numbers.size() 等于2的时候 numbers[numbers.size() / 2 + 1]) = nmbers[2] 就不存在
假如我输入了两个数,1和2,那么numbers[numbers.size() / 2 + 1]) = nmbers[2]所表示的不就是第二个元素2吗?请问是我理解错了吗? 什么叫做越界,您能稍微详细地讲一下吗? 谢谢!
雨夜独行的人 2014-06-09
  • 打赏
  • 举报
回复
引用 1 楼 longburulin 的回复:
vector越界了 为什么要这样输入呢
#include<iostream>
#include<string>
#include<vector>
#include <algorithm>
#include<cmath>
using namespace std;
inline void keep_window_open(){ char ch; cin >> ch; }
int main()
{
	vector<double>numbers;
	double number;
	while (1)
	{
		for(int i=0;i<3;i++)
		{
			cin>>number;
		  numbers.push_back(number);
		}                                     //这样输入不好么? for中的i<3 是最小的了 如果为2 下面你写的代码就越界了 再说了 你后面的代码也有问题
		sort(numbers.begin(), numbers.end());
		if (numbers.size()%2==0)
		{
			cout << "The median of the numbers is " << (numbers[numbers.size() / 2] + numbers[numbers.size() / 2 + 1]) / 2 << "."<<endl;
		}
		if (numbers.size()%2==1)
		{
			cout << "The median of the numbers is " << numbers[numbers.size() / 2+1] << "." << endl;
		}
	}
}
while语句中嵌套的for语句会循环3次,其后接着 cin>>number; numbers.push_back(number),这是否意味着只能求3个数的中位数? 请问后面的代码有什么问题?我真的没发现。
modyaj 2014-06-07
  • 打赏
  • 举报
回复
明显的 用数组下表访问时候越界了 比如 numbers.size() 等于2的时候 numbers[numbers.size() / 2 + 1]) = nmbers[2] 就不存在
longburulin 2014-06-07
  • 打赏
  • 举报
回复
vector越界了 为什么要这样输入呢
#include<iostream>
#include<string>
#include<vector>
#include <algorithm>
#include<cmath>
using namespace std;
inline void keep_window_open(){ char ch; cin >> ch; }
int main()
{
	vector<double>numbers;
	double number;
	while (1)
	{
		for(int i=0;i<3;i++)
		{
			cin>>number;
		  numbers.push_back(number);
		}                                     //这样输入不好么? for中的i<3 是最小的了 如果为2 下面你写的代码就越界了 再说了 你后面的代码也有问题
		sort(numbers.begin(), numbers.end());
		if (numbers.size()%2==0)
		{
			cout << "The median of the numbers is " << (numbers[numbers.size() / 2] + numbers[numbers.size() / 2 + 1]) / 2 << "."<<endl;
		}
		if (numbers.size()%2==1)
		{
			cout << "The median of the numbers is " << numbers[numbers.size() / 2+1] << "." << endl;
		}
	}
}

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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