2017-05-22 2 views
-4

Benötigen Sie Hilfe mit diesem Code sollte es c[] mit der Nummer a[] % b[] = 0 zurückgeben, aber es funktioniert nicht.C: Warum funktioniert dieser Code nicht?

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

int *divide(int a[], int a_size, int b[], int b_size) 
{ 
    int i = 0, j = 0, k = 0, counter = 0, *c; 
    c = (int*)malloc(b_size * sizeof(int)); 

    for (i = 0; i < b_size; i++) 
    { 
     for (j = 0; j < a_size; j++) 
     { 
      if (a[j] % b[i] == 0) 
       counter++; 
     } 

     c[k] = counter; 
     k++; 
     counter = 0; 
    } 

    for (int t = 0; t < b_size; t++) 
    { 
     printf("%d ", c[t]); 
    } 
    printf("\n"); 
} 

main() 
{ 
    int *a, *b, a_size, b_size; 

    printf("Enter size of a:\n"); 
    scanf ("%d", &a_size); 
    a = (int*)malloc(a_size * sizeof(int)); 

    printf("\nEnter size of b:\n"); 
    scanf("%d", &b_size); 
    b = (int*)malloc(b_size * sizeof(int)); 

    printf("\nEnter elements of a:\n"); 
    for (int i = 0; i < a_size; i++) 
    { 
     scanf("%d", &a[i]); 
    } 


    printf("\nEnter elements of b:\n"); 
    for (int j = 0; j < b_size; j++) 
    { 
     scanf("%d", &b[j]); 
    } 


    divide(&a, a_size, &b, b_size); 
} 
+0

Bitte fragen Sie und stellen Sie die Codebeispiele nur für ein bestimmtes Problem zur Verfügung. –

+0

Wenn Sie diesen Code überhaupt getestet haben, sollten Sie uns Ihre Ergebnisse mitteilen. Wenn Sie noch nicht debuggt haben, sollten Sie. – csmckelvey

+0

'teile (& a, a_size, & b, b_size);' ===> teile (a, a_size, b, b_size); ' – WhozCraig

Antwort

0

Es gab einige Fehler in Ihrem Code.

Sie möchten, dass Ihre Funktion * divide (...) ein neues Array mit der Operation a [i]% b [i] zurückgibt, aber Ihre Funktion gibt nichts zurück, also müssen Sie sie zurückgeben. Es scheint logischer zu sein, das neue Array im Hauptfenster als in der Funktion zu drucken.

Wenn Sie die Variablen an Ihre Funktion übergeben, achten Sie darauf, int *, nicht int ** zu übergeben. Hier

ist ein Beispiel für Code, der funktioniert (Sie hat nicht gesagt, was zu tun ist, wenn a_size und b_size unterschiedlich waren, so gehe ich davon aus wir nur die kleinste Größe verwenden und nicht behandeln die Zahl nach):

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

int *divide(int a[], int a_size, int b[], int b_size) 
{ 
int i = 0, stop, *c; 

if (b_size <= a_size) 
{ 
    c = (int*)malloc(b_size * sizeof(int)); 
    stop = b_size; 
} 
else 
{ 
    c = (int*)malloc(a_size * sizeof(int)); 
    stop = a_size; 
} 

while (i < stop) 
{ 
    c[i] = a[i] % b[i]; 
    i++; 
} 
return (c); 
} 

int main() 
{ 
int *a, *b, a_size, b_size; 
int *result = NULL; 
int stop; 
int i = 0; 

printf("Enter size of a:\n"); 
scanf ("%d", &a_size); 
a = (int*)malloc(a_size * sizeof(int)); 

printf("\nEnter size of b:\n"); 
scanf("%d", &b_size); 
b = (int*)malloc(b_size * sizeof(int)); 

printf("\nEnter elements of a:\n"); 
for (int i = 0; i < a_size; i++) 
{ 
    scanf("%d", &a[i]); 
} 


printf("\nEnter elements of b:\n"); 
for (int j = 0; j < b_size; j++) 
{ 
    scanf("%d", &b[j]); 
} 


result = divide(a, a_size, b, b_size); //not &a neither &b because it would be a char** instead of a char* 
if (a_size < b_size) 
    stop = a_size; 
else 
    stop = b_size; 
while (i < stop) 
{ 
    printf("%d ", result[i]); 
    i++; 
} 
return 0; 
} 
Verwandte Themen