2016-11-26 68 views
-1

嗨如果初始化打印錯誤消息的函數,如果數組中的某些數字是相同的,我有問題。功能不初始化

#include<stdio.h> 
#include<stdlib.h> 

void printRepeating(int arr[], int size) 
{ 
    int i, j; 
    for(i = 0; i < size; i++) 
    for(j = i+1; j < size; j++) 
     if(arr[i] == arr[j]) 
     printf("Wrong input. Same numbers in array!\n"); 
}  

int main() 
{ 
    int arr[200],i; 
    int res, num; 
    while((res = scanf("%d", &num)) == 1) 
    { 
     arr[i++] = num; 
     if(num == 0){ 
     break; 
     } 
    } 
    for(i = 0; i < arr[i]; i++) 
     printf("%d ", arr[i]); 
    printf("\n"); 
    int arr_size = sizeof(arr[i])/sizeof(arr[0]); 
    printRepeating(arr, arr_size); 
    return 0; 
} 

如果我掃描1 2 3 1 4 5 0,我的功能printRepeating無法啓動不過我有一個數組中,爲什麼相同的數字1 1?另一個問題是,當我輸入1 2 3 1 5 0它只打印1 2 3和例如我當我掃描1 2 3 4 5 6 7 8 9 0它打印除0之外的所有數字。

+0

問題是否解決?如果有答案,請將答案標記爲已接受。 @blackroad – Jarvis

回答

0

您的代碼有多個問題。首先,初始化i0,並宣佈了新的變數j一起i

int arr[200], i = 0, j; 

你的數組的大小將僅僅是i,你增量每次插入數組中的元素的時間,並更改該,

for(i = 0; i < arr[i]; i++) 
    printf("%d ", arr[i]); 

這個

for(j = 0; j < i; j++) 
     printf("%d ", arr[j]); 

,因爲你的一個大小rray存儲在變量i中。另外,計算數組大小的方式是錯誤的,每次都返回1,因爲分子和分母是相同的。一般來說,它是sizeof(array)/sizeof(array[0]),在這種情況下,它也會返回200,因爲您聲明的數組的大小爲200,但由於您每次插入時都增加i,因此只需將您的arr_size設置爲i即可。

int arr_size = i; 
+0

我想你的問題已經解決,請標記這個答案,如果它解決了你的問題。 @blackroad – Jarvis

0

此行

int arr_size = sizeof(arr[i])/sizeof(arr[0]); 

不會做你期待什麼。您只將數組中兩個元素的大小相同,因此總是給出1的結果。如果你想給函數的元素數目,給它一個變量,你用它來讀取每個數字。

而且這樣的:

for(i = 0; i < arr[i]; i++) 
    printf("%d ", arr[i]); 

那是不是比他們更大的索引只印數。再次,您的程序缺少一個變量來計算輸入值的數量。