2017-10-04 6 views
-4

Also ich bin neu in SO und meine Frage wurde nicht gut erhalten ... also habe ich es bearbeitet, um informativer zu sein.Warnung: Format '% d' erwartet Typ 'int', aber Argument 2 hat den Typ 'int (*) (int *, int *, int)'

Ich versuche, ein Programm zu schreiben, das zwei Funktionen im Hauptprogramm aufruft. Das habe ich bisher:

#include <stdio.h> 

#define N 10 

int inner_product(int a[], int b[], int n); 
int inner_product_reverse(int a[], int b[], int n); 

int main(void) { 
int a[N], b[N], i; 

printf("Enter the first array of size 10: "); 
for (i = 0; i < N; i++) 
    scanf("%d", &a[i]); 

printf("Enter the second array of size 10: "); 
for (i = 0; i < N; i++) 
    scanf("%d", &b[i]); 

printf("Inner product is: %d\n", inner_product); 
printf("Inner product reverse is: %d\n", inner_product_reverse); 
return 0; 
} 

int inner_product(int a[], int b[], int n) { 
int sum = 0, i; 
for (i = 0; i < N; i++) 
    sum += (a[i] * b[i]); 
return sum; 
} 

int inner_product_reverse(int a[], int b[], int n) { 
int sum = 0, i; 
for (i = 0; i < N; i++) 
    sum += (a[i] * b[(N-1)-i]); 
return sum; 

Aber ich bekomme den Fehler im Titel. Ich weiß, dass es eine Frage des Unterschieds in der Zahl der Argumente ist, die genannt werden, aber ich bin nicht sicher, wie man es in einer Weise schreibt, die alle Argumente der Funktionen berücksichtigt. Müsste ich die for-Schleife verschieben, die irgendwie das innere Produkt in das main berechnet? Vielen Dank.

+0

Was Sie bisher versucht haben? Auf welche Probleme hast du gestoßen? Zeigen Sie Ihre Bemühungen. SO ist kein Service für deine Hausaufgaben. – tambre

+3

Am besten definieren. Eine einfache For-Schleife würde die Arbeit erledigen. –

+0

Wenn Sie eine Funktion aufrufen, die eine int-Variable zurückgibt, rufen Sie die Funktion auf, übergeben Sie den Zeiger nicht an sie. – tilz0R

Antwort

0

Problem ist im Aufruf printf Funktion als die Warnung bereits gesagt.

printf("Inner product is: %d\n", inner_product); 
printf("Inner product reverse is: %d\n", inner_product_reverse); 

inner_product und inner_product_reverse sind Funktionen, die int zurück und akzeptiert 3 Parameter: int (*)(int *, int *, int).

Um nun zum Ergebnis zu gelangen, rufen Sie diese 2 Funktionen auf. Was Sie getan haben, ist, dass Sie Zeiger (Standort) von ihnen zu printf-Funktion übergaben, und das ist falsch.

Sie sollten Ihren Code etwas ähnliches umschreiben:

//        Parameters are added and function will be called 
printf("Inner product is: %d\n", inner_product(a, b, i)); 
printf("Inner product reverse is: %d\n", inner_product_reverse(a, b, i)); 
Verwandte Themen