2016-11-26 7 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つの問題は、タイプ1 2 3 1 5 0と入力すると1 2 3しか印刷されません。たとえば、1 2 3 4 5 6 7 8 9 0をスキャンすると、0以外のすべての数字が出力されます。

+0

問題は解決しましたか?もしそうであれば、その答を合格とマークしてください。 @blackroad – Jarvis

答えて

0

コードに複数の問題があります。まず、0するiを初期化し、あなたの配列の大きさは、単にあなたが配列の要素を挿入し、これを変更するたびにインクリメントされ、iだろう

int arr[200], i = 0, j; 
iと一緒に新しい変数 jを宣言あなたのAの大きさから、この

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

に、

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

rrayは変数iに格納されます。また、配列のサイズを計算する方法は間違っています。分子と分母が同じなので、毎回1を返します。一般に、それはsizeof(array)/sizeof(array[0])です。この場合も、宣言された配列のサイズは200なので200が返されますが、挿入するたびにiをインクリメントするので、に設定してください。

int arr_size = i; 
+0

問題が解決したと思われる場合は、問題が解決した場合にこの回答に印を付けてください。 @blackroad – Jarvis

0

このライン

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

は、あなたが期待している何をしません。配列の2つの要素のサイズを分割するのは常に同じサイズなので、結果として常に1となります。関数に要素の数を与えたい場合は、読み込んだときに各数値を数えるために使用した変数を与えます。

また、この:

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

は、それぞれのインデックスより大きくはないだけで、印刷番号です。繰り返しますが、入力値の数を数える変数がプログラムにありません。

関連する問題