簡體   English   中英

我的代碼中的垃圾結果

[英]Garbage Result in my code

大家好,所以我正在研究可找到相同數字並顯示它們的代碼,到目前為止,結果只是我需要幫助的隨機數。

int main(void){
int arr[10] = {1, 2, 3, 4, 5, 4, 8 ,8, 9, 10};
int i;
int j;
int same[10];
int ctr = 0;

for(i = 0; i < 10; i++){
    for(j = 10; j > 0;j--){
        if(arr[i] == arr[j]){
            same[ctr++] = arr[i];//store the similar numbers
        }
    }
}

for(i = 0; i < 10; i++){
    printf("%d", same[i]);
}
getch();
return 0;}

你自相矛盾。 對於同一數組,您正在使用兩個不同的索引方案!

  • 在外循環( 升序索引 )中,您的索引從09
  • 在內部循環( 遞減索引 )中,您從1開始索引10

內部循環索引是一對一的 ,從而訪問了無效的綁定內存。 這會導致不確定的行為

你需要做到

for(j = 9; j >= 0;j--)

之后,您嘗試打印same數組中所有元素的值,而實際上( 可能沒有 )為所有( 或無 )元素值分配值。 您未對自動變量進行初始化,從而包含了不確定的值。 由於該變量從未使用過其地址,因此嘗試使用該值將再次導致UB。

就是說,一旦找到匹配項,就可以使用continue跳轉到外部循環。

從9開始第二個循環( j循環),然后轉到0。

我在codechef編譯器上運行了您的代碼,它給出了運行時錯誤。 因為在您的ctr ++步驟中,ctr的值超出了數組same []的大小。

而且,在您的代碼中,您正在將一個元素與其自身進行比較,因此每個數字都將被打印在列表中(因為i == j可能是這種情況)

如果包含條件i!=j或將j from i+1 to 9迭代j from i+1 to 9這樣最好不進行自我比較,那會更好。 以下是相同代碼的工作片段(您的for循環):-

for(i = 0; i < 10; i++){
    for(j = 10; j > 0;j--){
        if(arr[i] == arr[j] && i!=j){
            same[ctr] = arr[i];//store the similar numbers
            ctr++;
            cout<<ctr<<" ";
        }
    }
} 

暫無
暫無

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

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