2016-08-06 31 views
0

Hallo Leute, dieses Programm macht eine Funktion, die eine Reihe von Zufallszahlen erzeugt. Es verwendet dann eine andere Funktion, um anzuzeigen, wie oft die von einem Benutzer angegebene Nummer in der Liste ist. Ich habe Probleme in den Zeiten, die Anzeige eine Zahl zeigt, in der Anordnung nach oben, da der Ausgang 0.Finden der Zeiten, die ein # in einem Array ist

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 

Typ immer eine Zahl, um zu sehen, wie oft er in der Liste erscheint: 16 .Ihre Nummer aufgeführt 0 mal

-Code

#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

Sie haben ein Semikolon am Ende der Anweisung 'for'. – user3386109

+0

Ich nahm das ";" aus und lief es wieder ohne Veränderung. Zeigt immer noch 0 an, wenn eine Nummer in der Liste ist. – jun

+2

Das ist nur die Spitze des Eisbergs in diesem Code. 'j = j ++;' ruft undefiniertes Verhalten auf. Sie fügen 'stdlib.h' nie ein, das die Definition von' srand() 'enthält. Sie enthalten nie "time.h", die die Deklaration von "time()" enthält. Sie haben noch viel Arbeit vor sich. – WhozCraig

Antwort

2

Neben Zugabe stdlib.h und time.h und Fixieren, das Semikolon verloren, sollten Sie Ihre Rückkehr stat haben platziert in CountNumb() außerhalb der for-Schleife.

Ihre CountNumb wie folgt ändern:

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

Der gesamte Code kann hier gefunden werden: codingground

3

CountNumb Funktionen in Ihrem Es gibt drei Probleme:

  1. Es ist eine unnötige Semikolon nach Ihrer for Schleife stament.
  2. Sie müssen j++ anstelle von j = j++; tun. Sie können j = j++; nicht tun, da es zu undefined behavior führt.
  3. Sie kehren innerhalb der for Schleife zurück, anstatt nach Abschluss der for Schleife zurückzukehren.

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; 
} 

Auch müssen Sie include<stdlib.h> und include<time.h>.