2016-08-06 2 views
0

Привет, ребята, эта программа создает функцию, которая создает массив случайных чисел. Затем он использует другие функции, чтобы отображать, сколько раз номер, предоставленный пользователем, указан в списке. У меня возникли проблемы в отображении раз число появляется в массиве, так как выход всегда 0.Поиск времени a # в массиве

10 32 31 5 34 39 10 15 39 25 26 10 27 21 
50 31 3 21 29 16 12 42 29 30 8 28 19 8 39 1 
19 50 34 2 4 18 40 14 34 30 40 12 41 16 32 42 
48 34 12 28 

Введите номер, чтобы увидеть, сколько раз он появляется в списке: 16 .your номер является перечисленные 0 раз

Код

#include <stdio.h> 

int MakeRand() 
{ 
    srand(time(NULL)); 
} 

void fillArray(int arr[], int high) 
{ 
    int i,N; 
    N = 50; 
    for (i=0;i<N;++i) 
    { 
     arr[i] = rand() % high +1; 
     printf("%d ", arr[i]); 
    } 
} 

int CountNumb(int arr[], int x) 
{ 
    int k,j; 
    j = 0; 
    for (k=0;k<50;++k); 
    { 
     if (arr[k] == x) 
     { 
      j = j++; 
     } 
     return j; 
    } 
} 

int main() 
{ 
    int nums[50]; 
    int b,k,n; 

    MakeRand(); 
    fillArray(nums,50); 
    printf("Type a number to see how many times it appears in your list: "); 
    scanf("%d",&n); 
    b = CountNumb(nums,n); 
    printf("Your number is listed %d times\n",b); 
    return 0; 
} 
+4

У вас есть точка с запятой в конце инструкции 'for'. – user3386109

+0

Я взял «;» и снова запускал его без изменений. Показывает 0, когда число находится в списке. – jun

+2

Это только верхушка айсберга в этом коде. 'j = j ++;' вызывает неопределенное поведение. Вы никогда не включаете 'stdlib.h', в котором содержится определение' srand() '. Вы никогда не включаете 'time.h', в котором содержится объявление' time() '. У вас еще впереди много работы. – WhozCraig

ответ

2

Помимо добавления stdlib.h и time.h и крепления, которые потеряли точку с запятой, вы должны разместили свой обратный стат ement в CountNumb() вне цикла for.

Изменить CountNumb следующим образом:

int CountNumb(int arr[], int x) 
    { 
    int k,j; 
    j = 0; 
    for (k=0;k<50;++k) 
    { 
    if (arr[k] == x) 
     { 
     j++; 
     } 
    } 
    return j; 
    } 

Весь код можно найти здесь: codingground

3

Есть три проблемы в ваших CountNumb функций:

  1. Существует ненужная точка с запятой после вашего затвора for.
  2. Вам необходимо сделать j++, а не j = j++;. Вы не можете сделать j = j++;, так как он ведет к undefined behavior.
  3. Вы возвращаетесь внутри цикла for вместо возврата после завершения цикла for.

int CountNumb(int arr[], int x) 
{ 
    int k,j; 
    j = 0; 
    /* for (k=0;k<50;++k); */ /* Isuee 1 here, trailing semicolon */ 
    for (k=0;k<50;++k) 
    { 
     if (arr[k] == x) { 
      /* j = j++; */ /* Issue 2 here, you just need j++ */ 
      j++;   /* Or j = j + 1;, or j += 1; but NOT j = j++ */ 
     } 
     /* return j; */ /* Issue 3 here, you need to return at end of function */ 
         /* Not inside the for loop */ 
    } 
    return j; 
} 

Кроме того, необходимо include<stdlib.h> и include<time.h>.

Смежные вопросы