簡體   English   中英

For 循環 - 輸出比需要的多

[英]For loop - more in output than needed

好吧,我所要做的就是:

  • 用戶必須輸入 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;
    }
}

}

問題在這里:

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

sizeof運算符以字節為單位返回數組的大小,而不是以元素數為單位。 在普通的現代系統上, int的大小是四個字節,這意味着sizeof masivs將為您提供4*19

這將導致循環大量超出范圍並給您未定義的行為

更不用說你在上一個循環中的另一個越界了。

另外,考慮第一個循環,為什么在循環內分配給skaitlis 在修復越界索引后,它只會分配零(因為masivs是一個全局變量,因此初始化為全零),除非在最后一次迭代中。 您可以將該分配移到循環之外。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM