2016-11-26 69 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]); 

那是不是比他们更大的索引只印数。再次,您的程序缺少一个变量来计算输入值的数量。