【问题标题】:For loop - more in output than neededFor 循环 - 输出比需要的多
【发布时间】:2016-09-25 13:25:23
【问题描述】:

我所要做的就是:

  • 用户必须输入 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 之后很多 0 进来了。

#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;
    }
}

}

【问题讨论】:

  • ì&lt;=19 表示您访问数组外部的元素 19:未定义的行为。
  • 使用all warnings switched on 编译。编译器已经告诉你出了什么问题。

标签: c++ loops for-loop


【解决方案1】:

问题出在这里:

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

sizeof 运算符返回数组的大小以字节为单位,而不是元素的数量。在普通的现代系统上,int 的大小是四个字节,这意味着sizeof masivs 将给你4*19

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

更不用说你在上一个循环中的 other 越界了。

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

【讨论】:

  • 谢谢,我修复了超出限制的循环,并删除了循环内的 skaitlis,现在一切正常。谢谢! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-20
  • 1970-01-01
  • 2019-09-03
  • 1970-01-01
  • 1970-01-01
  • 2019-07-21
  • 1970-01-01
相关资源
最近更新 更多