for循环 - 输出比需要的更多

时间:2016-09-25 13:25:23

标签: c++ loops for-loop

我所要做的就是:

  • 用户必须输入20个号码。
  • 我应该从数组编号中找到低于用户输入的最后一个数字(20个数字)

示例:

用户输入:

1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,4

输出应为:

1,2,3

据我说,我的输出是正确的。但在1,2,3之后很多人进来了。

#include <iostream>
using namespace std;
int i,skaitlis,sk2,x;
int masivs[19];
int main() {


for ( i=0; i<=19; i++ )
{
   cin >> masivs[i];
   skaitlis = masivs[19];
}

for (i=0;i < sizeof masivs; i++){
    if ( masivs[i]<skaitlis){
        cout << masivs[i] <<endl;
    }
}

}

1 个答案:

答案 0 :(得分:0)

问题在于:

for (i=0;i < sizeof masivs; i++){

sizeof运算符返回数组的字节数,而不是元素数。在普通的现代系统中,int的大小为四个字节,这意味着sizeof masivs将为您提供4*19

这将导致循环大量超出范围并为您提供未定义的行为

更不用说上一循环中其他超出界限了。

另外,考虑到第一个循环,为什么在循环中赋值给skaitlis?在修复了越界索引之后,它将只分配零(因为masivs是一个全局变量,因此初始化为全零),除了在最后一次迭代中。您可以将该分配移到循环之外。