einen Fehler mit der Funktion



  • Hallo ,
    bin Anfänger mit C und ich versuche das folgende Programm zu kompilieren und klappt es nicht da ich den Fehler (Each undeclared identifier is reported only once for each function it appears in.) (Each undeclared identifier is reported only once for each function it appears in.) kriege.

    #include <stdio.h>
    
    int main(){
        int a,b,ggt;   
        printf("Geben Sie die erste Zahl\n");
        scanf("%d",a);
        printf("Geben Sie die zweite Zahl\n\n");
        scanf("%d",b);
        ggt=ggtBerechnen(a,b);
        printf("Der ggt ist %d",&ggt);
        return 0;
        }
    int ggtBerechnen(int a,int b){
         if(a>b)
         return ggtBerechnen(a-b,b);
         if(b>a)
         return ggtBerechnen(a,b-a);
         if(a==b)
         return a;
         }
    

    Der Fehler ist an Zeile 9.
    hat jemand eine Idee?
    Danke:)



  • Die Funktion ist noch an der Stelle an der Du sie aufrufst noch nicht bekannt.
    Du musst sie noch deklarieren:

    int ggtBerechnen(int a,int b);
    
    int main(...)
    {...
    


  • Oder die main ans Ende des Quellcodes schreiben.

    int ggtBerechnen(int a,int b)
    { ...
    }
    
    int main(...)
    {... 
    }
    


  • Ausserdem benutzt man scanf so :

    scanf("%d",&a);
    


  • Ausserdem benutzt man scanf so :

    if( 1==scanf("%d",&a) )
    {
    }
    


  • Danke allen:)
    jetzt habe ich mein Programm so geschrieben

    #include<stdio.h>
    int ggtBerechnen(int a,int b);
    int main(){
           int n,i,fi=0;
          printf("Geben Sie eine Zahl\n");
          scanf("%d",&n);
          for(i=0;i<n;++i){
                        if(ggtBerechnen(n,i)==1)
                    ++fi;
                           }
                           printf("%d",fi);
                           return 0;
         }
    int ggtBerechnen(int a,int b){
         if(a>b)
           ggtBerechnen(a-b,b);
         if(b>a)
          ggtBerechnen(a,b-a);
         if(a==b)
          return a;
         }
    

    und ich kriege wieder einen fehler wenn ich es ausführe! aber ein fehler nach der ausführung und nicht bevor und der debugger zeigt kein problem!!:(



  • bafla13 schrieb:

    und ich kriege wieder einen fehler wenn ich es ausführe! aber ein fehler nach der ausführung und nicht bevor und der debugger zeigt kein problem!!:(

    Das ist doof.
    Da meine Glaskugel dich gerade nicht orten kann, ist es ganz hilfreich wenn du einfach mal sagst, was für ein Fehler auftritt.

    Schau aber mal nach deinem i. Wie sieht denn z.B. der ggt von 10 und 0 aus ?



  • DirkB schrieb:

    bafla13 schrieb:

    und ich kriege wieder einen fehler wenn ich es ausführe! aber ein fehler nach der ausführung und nicht bevor und der debugger zeigt kein problem!!:(

    Das ist doof.
    Da meine Glaskugel dich gerade nicht orten kann, ist es ganz hilfreich wenn du einfach mal sagst, was für ein Fehler auftritt.

    Schau aber mal nach deinem i. Wie sieht denn z.B. der ggt von 10 und 0 aus ?

    das Problem ist dass ich den Fehlern nach der Ausführung kriege,und dann muss ich mein Programm schließen und der Compiler zeig mir keinen Fehler sondern das Windows



  • Ich glaueb ich habe es gefunden,
    das ist wegen dem dividieren durch 0 ,das habe ich nur jetzt bemerkt
    danke;)



  • bafla13 schrieb:

    Ich glaueb ich habe es gefunden,
    das ist wegen dem dividieren durch 0 ,das habe ich nur jetzt bemerkt
    danke;)

    Das meinte ich mit ggt von 10 und 0 🙂

    bafla13 schrieb:

    das Problem ist dass ich den Fehlern nach der Ausführung kriege,und dann muss ich mein Programm schließen und der Compiler zeig mir keinen Fehler sondern das Windows

    Ist da denn keine Meldung von Windows gekommen? Auch der Hinweis dass das Programm abstürzt oder ewig läuft hilft bei der Fehlersuche.

    Wir sind keine Hellseher.
    (Wären wir welche, hätten wir den Lotto-Jackpot und wären sonstwo)



  • bafla13 schrieb:

    int ggtBerechnen(int a,int b){
         if(a>b)
           ggtBerechnen(a-b,b);
         if(b>a)
          ggtBerechnen(a,b-a);
         if(a==b)
          return a;
         }
    

    Bin ich der einzige dem auffällt, daß dort ein paar return-Anweisungen fehlen? Tip: Was gibt die Funktion beim Aufruf ggtBerechnen(4,) zurück?



  • CStoll schrieb:

    Bin ich der einzige dem auffällt, daß dort ein paar return-Anweisungen fehlen?

    Nein, bist du nicht! Nur die alte Regel einer jeden Funktion Eingabe-Verarbeitung-Ausgabe (EVA) scheint in Vergessenheit geraten zu sein. Returns innerhalb einer Funktion haben starke Ähnlichlichkeit mit goto aus BASIC-Zeiten.



  • Zur Not hätte ich auch mit einer Hilfsvariable leben können, die am Ende der Funktion zurückgegeben wird. Aber die Ergebnisse der rekursiven Aufrufe wegzuwerfen und dann die Funktion ohne ein return zu verlassen kann nur Müll ergeben.
    (nebenbei: ich gehöre nicht unbedingt zu den Verfechtern der "ein return in der Funktion"-Fraktion)


Anmelden zum Antworten