2016-09-25 172 views
-3

以及所有我需要做的就是:For循環 - 多輸出超過需要

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

} 
+1

「ì<= 19」表示您訪問陣列外部的元素19:未定義的行爲。 –

+0

編譯時[開啓所有警告](http://coliru.stacked-crooked.com/a/dfa4445a11db2744)。編譯器已經告訴你什麼是錯的。 –

回答

0

的問題是在這裏:

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

sizeof操作返回數組的字節大小,而不是在數元素。在普通的現代系統中,int的大小是四個字節,這意味着sizeof masivs會給你4*19

這將導致循環大量出界,並給你未定義的行爲

更何況其他越界你在前面的循環。

另外,考慮到第一個循環,爲什麼要在循環內部賦值skaitlis?修復超出邊界索引後,它只會分配零(因爲masivs是一個全局變量,因此初始化爲全零),但在上一次迭代中除外。您可以將該分配移動到循環之外。

+0

謝謝,我修復了無界限循環,並刪除了循環內的skaitlis,現在一切正常。 謝謝! :) – Krichukzz