用c++做一个数组练习时遇到一个问题

问题描述

用c++做一个数组练习时遇到一个问题
我想将1到100之间的偶数存进数组,然后再通过数组将这些偶数输出,但是不知为什么运行结果发生了溢出,可否帮我看看原因?
代码:
#include
using namespace std;
int main()
{
int oushues[50];
int cnt=0;
for(int i=1;i<=100;i++)
{
if(i%2==0)
{
oushues[cnt++]=i;

       cout<<oushues[cnt]<<endl;           }        }

return 0;
}

解决方案

问题出在了 oushues[cnt++]=i;,给数组一个元素赋值后,数组下标增1,而后面的输出就是下一个数组元素了,还没有赋值,当然舍溢出了,解决方法就不用说了吧。

解决方案二:
当 i 的值为 50 的时候,索引会超出数组的范围,oushues[50] 的索引值是 0-49

解决方案三:
我说错了,是当 i 为 100 的时候。
oushues[cnt++]=i; ------------------------- cnt 为 49
cout<<oushues[cnt]<<endl; ------------- cnt 为 50 (越界)

解决方案四:

解决方案五:
#include
#include

using std::vector;
using std::cout;
using std::flush;

int main(int argc const char * argv[]) {
//container
std::__1::vector int_vec;

for(int i = 1;i < 101;++i){    //even    if(i % 2 == 0){        int_vec.push_back(i);    }}for(std::__1::vector<int>::const_iterator it = int_vec.begin();it != int_vec.end();++it){    cout << *it << "" "" << flush;}return 0;

}

这样写,你就溢不出了

解决方案六:
cout<<oushues[cnt]<<endl; 输出了oushues[50];
因为这里有问题oushues[cnt++]=i;

解决方案七:
cout<<oushues[cnt]<<endl; 输出了oushues[50];
因为这里有问题oushues[cnt++]=i;

解决方案八:
问题出在了 oushues[cnt++]=i;,给数组一个元素赋值后,数组下标增1,而后面的输出就是下一个数组元素了,还没有赋值,当然舍溢出了,解决方法就不用说了吧。

时间: 2024-11-17 04:50:32

用c++做一个数组练习时遇到一个问题的相关文章

用c++写了一个函数判断一个数组是否包含另一个数组 但是总是返回-1 请大神们帮忙看看错在哪里

问题描述 用c++写了一个函数判断一个数组是否包含另一个数组 但是总是返回-1 请大神们帮忙看看错在哪里 int substr_index( const char substr[], const char str[]) { int flag = -1; int sizeOfSubstr = sizeof(substr)/sizeof(char); int sizeOfStr = sizeof(str)/sizeof(char); for (int i = 0; i < sizeOfStr; i+

vb net-VB.NET能自己定义一个事件,比如一个变量等于一个特定值时引发一个事件的触发吗?

问题描述 VB.NET能自己定义一个事件,比如一个变量等于一个特定值时引发一个事件的触发吗? VB.NET能自己定义一个事件,比如一个变量等于一个特定值时引发一个事件的触发吗? 比如定义一个变量i 当i=1时触发一个事件 解决方案 自己定义一个方法把i封装起来,要改变i需要通过这个方法修改 比如 public sub modifyI(byval i1 as integer) i = i1 '触发事件 end sub 或者 用定时器的方式 Public class Form1 Public y_c

[WinForm]在一个界面把值用一个数组保存然后存到一个实体类中.

问题描述 界面有多个TxtBox值... 解决方案 解决方案二:怎么实现?高手来挖解决方案三:this.m_texts=newstring[textBoxes.Length];for(inti=0;i<textBoxes.Length;i++){m_texts[i]=textBoxes[i].Text;} 解决方案四:List<string>list=newList<string>();foreach(Controlcinthis.Controls){if(c.GetType

js 实现两个数组(一个数组包含于另一个数组中)元素组成第三个数组

问题描述 比如a= [1,2,3,4,5,6] b = [1,3] 那么c应该为[1,0,1,0,0,0]或者a为这个也可以,这个该如何实现呢 解决方案 function getC(a,b){Array.prototype.contains = function(item){ return RegExp(item).test(this);};r=new Array();len= a.length;for(var i=0;i<len;i++){if(b.contains(a[i])){r[i]=1

一个现成的二维数组,如何定义一个 指针的指针 来指向这个二维数组?

问题描述 一个现成的二维数组,如何定义一个 指针的指针 来指向这个二维数组? 例:这样一个数组,想定义一个指针的指针,指向它. int arr1[4][4] ={ {1,2,3,4}, {5,6,7,8}, {9,10,11,12}, {13,14,15,16} }; ps. 这个指针的指针 是 用来传递个函数的. 因为某种要求,需要向函数传递一个二维数组,函数的形参表中定义了 int **. 因此 这个指针的指针一定要能够传递函数,并且函数能够通过它操作二维数组元素. 解决方案 指向二维数组的

android-怎么做到存一个数据进数组,就有一个标志位,取出时也有标志位,并且取出时把已经取出的数据清除?

问题描述 怎么做到存一个数据进数组,就有一个标志位,取出时也有标志位,并且取出时把已经取出的数据清除? 同题目所问,因为我现在是有一个变量是每秒两百个数据,一直在存,每次存到1200,就又从0开始存.我现在要做到变存边取,取出来然后清除,我不知道代码该怎么写,会的大牛说一说吧,或者有更好的方法教我一下!谢谢! 解决方案 因为我等的数据量太多太快,一秒两百个,我是用那个数据画波形图的,不能丢一个数据,所以实时画出来很卡,所以要缓存一下比较好..有朋友知道怎么做更好一点的方法,教一教我.. 解决方案

objective c-添加NSMutableArray到另一个NSMutableArray中时数组值

问题描述 添加NSMutableArray到另一个NSMutableArray中时数组值 NSMutableArray *no1=[[NSMutableArray alloc]init]; NSMutableArray *no2=[[NSMutableArray alloc]init]; for(int i=0;i<3;i++) { for (int j=0;j<=i;j++) { NSString *no_str=[NSString stringWithFormat:@""

hashmap-使用SparseArray数组时的一个小问题

问题描述 使用SparseArray数组时的一个小问题 ![ 今天使用SparseArray时间,想将获取到的学校ID和名字存入SparseArray数组中,可是在取时间发现,取到的ID根本不是学校的ID,好像是名字对应的数组中的位置,如图.请问下大神们,这个怎么解决呢?我怎么能获取到我存入的学校ID呢?看官方文档貌似没有在传入String的方法了,还有就是这个类不能key和value都存String吗? 解决方案 因为String比较的是引用,虽然字符串相同,但是引用不同,不是一个对象,所以找

怎么做一个方法,接收一个数组,再返回接收的数组!

问题描述 怎么做一个方法,接收一个数组,再返回接收的数组! 解决方案 解决方案二:publicArrayListget(ArrayListarr){returnarr;}解决方案三:楼上的朋友,这样可以吗?我是用vs2005(c#)publicstringQuest_data(Byte[]datastring){stringaa;aa=datastring[0].ToString();returnaa;}解决方案四:这样?privatestring[]aaa(string[]bb){return