2016-07-15 17 views
-4

während des Kompilierens erhalten Sie Fehler Fehler: Lvalue erforderlich als linker Operand der Zuweisung fac (0) = 1; Fehler: Lvalue erforderlich als linker Operand der Zuweisung fac (i) = i * fac (i-1);Lvalue erforderlich als linker Operand der Zuweisung

#include<stdio.h> 


int fac(int i) 


{ 

    int j; 

    fac(0)=1; 

    fac(i)=i*fac(i-1); 


    printf("%d",fac(i)); 


} 

int main() 
{ 

    int x,y; 

    printf("enter the number"); 

    scanf("%d",&x); 

    if(x>=0) 

    { 
     fac(x); 
    } 


} 
+1

'fac (0) = 1 erreicht werden;' Wirklich? Wo hast du angefangen "C" zu lernen? – Michi

Antwort

0
fac(0)=1; 

ist nicht gültig c, Sie keinen Wert für Rekursion so zuweisen.

es scheint, wie Sie etwas näher an

if(j==0) { 
    return 1; 
} 


fac(i)=i*fac(i-1); 

Hier gilt das gleiche wollen, würden Sie können keinen Wert auf fac(i) zuweisen, da es sich um eine Funktionsaufruf ist.

2

In C geben Sie auf diese Weise keinen Funktionswert zurück; stattdessen würden Sie so etwas wie

if (i == 1 || i == 0) 
    return 1; 

return i * fac(i - 1); 

Das Problem ist, schreiben, dass die Ergebnis von fac(0) nicht auf ein Objekt bezieht, die Sie schreiben können; Es ist, als würde man versuchen, 1 einen neuen Wert zuzuweisen - das geht nicht.

0
fac(0)=1; 

Hier fac ist eine Funktion. fac(0) gibt einen Wert zurück (etwa x). Sie können den zurückgegebenen Wert dann nicht auf 1 festlegen. Nicht mindestens in C.

Was Sie tun möchten, ist die Funktion zu setzen 1 zurückzukehren, wenn der Eingang 0

Dies ist durch

int fac(int i) 
{ 
    int j; 
    if (i == 0) 
    { 
    return 1; 
    } 
    else 
    { 
    return (i*fac(i-1)); 
    } 
    printf("%d",fac(i)); 
} 
+1

Beachten Sie, dass die Anweisung 'printf' in diesem Code niemals ausgeführt wird. –