[C] Hilfe, Aufgabe läuft nicht.



  • Falls ihr aber in der Schule so ein hässliches C++ beigebracht bekommt (welches eigentlich mehr C ist), dann kann es schon reichen, wenn du die Datei von Main.c in Main.cpp umbenennst.

    Du solltest dir aber im klaren sein, dass der Code definitv kein C++ ist und nur als solcher compiliert wird.



  • Welcher Compiler wird eingesetzt?
    In aktuellen C-Compilern gibt es sehr wohl den Datentyp bool, auch wenn dieser intern schlicht auf int umgesetzt wird. Genauso steht es mit false und true, die auf 0 und 1 gesetzt werden. Und Typdeklarationen in einer for-Schleife sollten heute auch überall erlaubt sein.



  • Also soll ich das bool komplett weglassen bzw. dies hier:

    bool  Contains(int  vek[],int  eingabe,int  laenge)
    {
        for(int  i=0;i<laenge;i++) //durchlaufe das array
        {
            if(vek[i]==eingabe)//ist das N-Element identisch mit der eingabe
            {
                return  true; // dann gebe ja zurueck
            }
        }
        return  false; //ansonsten nein
    }
    


  • Ich benutze Microsoft Visual C++ 6.0 eine alte Version.



  • Du musst statt bool zB ein int verwenden, die werden ähnlich behandelt. Wenn ein int-Ausdruck gleich 0 ist, ist das äquivalent zu false, ansonsten true.
    Also:

    int a = ...
    if (!a)
    { ... } //a == 0
    
    if (a)
    { ... } //a != 0
    


  • hallo D-U-D-E,

    Danke für die Antwort aber ich bin noch nicht lange bei C dabei und deshalb hab ich jetzt Schwierigkeiten dieses Bool so zu ändern wie du geschrieben hast.

    Irgendwie will das nich im Kopf klick machen 😞 😞



  • int Contains(int vek[], int eingabe, int laenge)
    {
     int i;
    
        for (i = 0; i <laenge; i++) //durchlaufe das array
        {
            if (vek[i] == eingabe)//ist das N-Element identisch mit der eingabe
            {
                return 1; // dann gebe ja zurueck
            }
        }
    
        return 0; //ansonsten nein
    }
    


  • Wenn dein älterer C-Compiler das nicht machen will, dann benutze eigene Makros mit:

    #define bool int;
    #define false 0;
    #define true 1:
    

    Viel anders machen die anderen Compiler das auch nicht.



  • Das bool kannst du ersetzen mit:

    typedef unsigned bool;
    
    bool false = 0;
    bool true  = !false;
    

    Variablen dürfen in C89 nur am Funktionsanfang deklariert werden.

    Kommentare sind nur als Blockkommentare erlaubt

    /* Kommentar */
    


  • Besser wäre es noch die Werte durch ein const vor dem versehentlichen Überschreiben zu schützen.

    const bool false = 0;
    const bool true  = !false;
    

    true und false als Makro auszuführen hat allerdings den Vorteil, du kannst die Werte nicht mit Konstanten/Variablen gleichen Namens verstecken.



  • #ifdef __cplusplus
    #error ich weiss nicht was ich tue
    #endif
    
    typedef int bool;
    enum {false,true};
    
    bool  Contains(int  vek[],int  eingabe,int  laenge)
    {
        int i;
        for( i=0;i<laenge;i++) //durchlaufe das array
        {
            if(vek[i]==eingabe)//ist das N-Element identisch mit der eingabe
            {
                return  true; // dann gebe ja zurueck
            }
        }
        return  false; //ansonsten nein
    }
    


  • Ahaa!

    Also sowie es llll gemacht hat ist aber auch ok oder?

    Dann habe ich immernoch Fehler im "anderen" Stück.

    int  main(void)
    {
        //ein 10stelliges array erstellen und es {} leer initialisieren ( d.h. an jeder stelle steht 0}
        int  vektor[10] = {};
    
        //hilfsvariable fuer eingabe
        int  eingabe;
    
        //zahlen abfragen und fuellen
        for(int  i=0;i<sizeof(vektor)/sizeof(vektor[0]);i++)
        {
            printf("Geben Sie eine Zahl ein und bestaetigen sie mit ENTER\n");
            scanf("%i",&eingabe);//benutzer eingabe einlesen
    
            //ueberpruefen ob zahl bereits eingegeben wurde
            if(!Contains(vektor,eingabe,sizeof(vektor)/sizeof(vektor[0])))
            {
                printf("Ausgabe: %i \n",eingabe);
                    vektor[i]=eingabe;
            }
            //else
            //    printf("%i wurde breits eingegeben\n",eingabe);    
    }
    
        return  0;
    }
    

    Wenn ich dort die Fehler ausmerzen möchte, dann bleiben immernoch Fehler in diesem Teil.



  • Lass mich raten, der Fehler den du uns nicht mitteilen willst ist in Zeile 10 und besagt, dass das int da nicht hin darf?



  • Ich bin echt nich bei der Sache dabei, Viel zu Nervös. Tut mir Leid.

    int Contains(int vek[], int eingabe, int laenge) 
    { 
     int i; 
    
        for (i = 0; i <laenge; i++) //durchlaufe das array 
        { 
            if (vek[i] == eingabe)//ist das N-Element identisch mit der eingabe 
            { 
                return 1; // dann gebe ja zurueck 
            } 
        } 
    
        return 0; //ansonsten nein 
    } 
    
    int  main(void)
    {
        //ein 10stelliges array erstellen und es {} leer initialisieren ( d.h. an jeder stelle steht 0}
        int  vektor[10] = {};
    
        //hilfsvariable fuer eingabe
        int  eingabe;
    
        //zahlen abfragen und fuellen
        for(int  i=0;i<sizeof(vektor)/sizeof(vektor[0]);i++)
        {
            printf("Geben Sie eine Zahl ein und bestaetigen sie mit ENTER\n");
            scanf("%i",&eingabe);//benutzer eingabe einlesen
    
            //ueberpruefen ob zahl bereits eingegeben wurde
            if(!Contains(vektor,eingabe,sizeof(vektor)/sizeof(vektor[0])))
            {
                printf("Ausgabe: %i \n",eingabe);
                    vektor[i]=eingabe;
            }
            //else
            //    printf("%i wurde breits eingegeben\n",eingabe);    
    }
    
        return  0;
    }
    

    C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(19) : error C2059: Syntaxfehler : '}'
    C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(25) : error C2143: Syntaxfehler : Fehlendes ';' vor 'type'
    C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(25) : error C2143: Syntaxfehler : Fehlendes ';' vor 'type'
    C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(25) : error C2143: Syntaxfehler : Fehlendes ')' vor 'type'
    C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(25) : error C2143: Syntaxfehler : Fehlendes ';' vor 'type'
    C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(25) : error C2065: 'i' : nichtdeklarierter Bezeichner
    C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(25) : warning C4552: '<' : Operator hat keine Auswirkungen; Operator mit Seiteneffekt erwartet
    C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(25) : error C2059: Syntaxfehler : ')'
    C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(26) : error C2143: Syntaxfehler : Fehlendes ';' vor '{'
    C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(27) : warning C4013: 'printf' undefiniert; Annahme: extern mit Rueckgabetyp int
    C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(28) : warning C4013: 'scanf' undefiniert; Annahme: extern mit Rueckgabetyp int
    Fehler beim Ausführen von cl.exe.

    Dies kommt, wenn ich das Programm laufen lassen will. In der Tat unter anderem auch in Zeile10. Aber ich denke, das hängt nicht nur wegen der Zeile 10 ab oder doch?



  • #include <stdio.h>
    #include <stdlib.h>
    
    int Contains(int vek[], int eingabe, int laenge)
    {
    	int i;
    
        for (i = 0; i <laenge; i++) //durchlaufe das array
        {
            if (vek[i] == eingabe)//ist das N-Element identisch mit der eingabe
            {
                return 1; // dann gebe ja zurueck
            }
        }
    
        return 0; //ansonsten nein
    }
    
    int main(void)
    {
        int vektor[10];
    	int eingabe, i, len;
    
    	for (i = 0; i < 10; ++i)
    	{
    		vektor[i] = 0;
    	}
    
        len = sizeof(vektor)/sizeof(*vektor);
    
        //zahlen abfragen und fuellen
        for (i=0;i< len;i++)
        {
            printf("Geben Sie eine Zahl ein und bestaetigen sie mit ENTER\n");
            scanf("%d", &eingabe);//benutzer eingabe einlesen
    
            //ueberpruefen ob zahl bereits eingegeben wurde
            if (Contains(vektor,eingabe,len))
            {
    			printf("%d wurde breits eingegeben\n", eingabe);    
    
            }
    		else
    		{
               printf("Ausgabe: %d\n", eingabe);
    
    		   vektor[i] = eingabe;
    		}
    }
    
        return  0;
    }
    

    Der Visual C++ 6 ist so dermaßen veraltet. Vielleicht klappt der Code so, aber vielleicht auch nicht. Ein aktueller Compiler schafft es jedenfalls.



  • pcjr schrieb:

    Ich bin echt nich bei der Sache dabei, Viel zu Nervös. Tut mir Leid.

    Musst du nicht. Nur auch mal die Tipps ansehen, wenn man sie dir schon auf dem goldenen Tablett serviert.

    pcjr schrieb:

    Dies kommt, wenn ich das Programm laufen lassen will. In der Tat unter anderem auch in Zeile10. Aber ich denke, das hängt nicht nur wegen der Zeile 10 ab oder doch?

    Nicht alle, aber fast.

    pcjr schrieb:

    C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(19) : error C2059: Syntaxfehler : '}'

    Hier scheint er Probleme mit deiner leeren Klammer zu haben. Lasse sie weg, ohne Elemente hat sie auch keine Wirkung.

    pcjr schrieb:

    C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(25) : error C2143: Syntaxfehler : Fehlendes ';' vor 'type'
    C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(25) : error C2143: Syntaxfehler : Fehlendes ';' vor 'type'
    C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(25) : error C2143: Syntaxfehler : Fehlendes ')' vor 'type'
    C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(25) : error C2143: Syntaxfehler : Fehlendes ';' vor 'type'
    C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(25) : error C2065: 'i' : nichtdeklarierter Bezeichner
    C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(25) : warning C4552: '<' : Operator hat keine Auswirkungen; Operator mit Seiteneffekt erwartet
    C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(25) : error C2059: Syntaxfehler : ')'
    C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(26) : error C2143: Syntaxfehler : Fehlendes ';' vor '{'

    All das dürfte verschwinden, wenn du int i; an den Funktionsanfang schreibst.

    pcjr schrieb:

    C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(27) : warning C4013: 'printf' undefiniert; Annahme: extern mit Rueckgabetyp int
    C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(28) : warning C4013: 'scanf' undefiniert; Annahme: extern mit Rueckgabetyp int

    Du wirst vergessen haben stdio.h zu inkludieren.



  • Jawoll es läuft aber was hast du hier gemacht?

    int eingabe, i, len;

    UNd eimal hier:
    if (Contains(vektor,eingabe,len))



  • Variablen deklariert und die Länge des Arrays in len gespeichert:

    len = sizeof(vektor)/sizeof(*vektor);
    


  • @ Paul Müller

    #include <stdio.h>
    
    int Contains(int vek[], int eingabe, int laenge) 
    { 
     int i; 
    
        for (i = 0; i <laenge; i++) //durchlaufe das array 
        { 
            if (vek[i] == eingabe)//ist das N-Element identisch mit der eingabe 
            { 
                return 1; // dann gebe ja zurueck 
            } 
        } 
    
        return 0; //ansonsten nein 
    } 
    
    int  main(void) 
    
    { 
    	int i;
        //ein 10stelliges array erstellen und es {} leer initialisieren ( d.h. an jeder stelle steht 0} 
        int  vektor[10] ; 
    
        //hilfsvariable fuer eingabe 
        int  eingabe; 
    
        //zahlen abfragen und fuellen 
        for(i=0;i<sizeof(vektor)/sizeof(vektor[0]);i++) 
        { 
            printf("Geben Sie eine Zahl ein und bestaetigen sie mit ENTER\n"); 
            scanf("%i",&eingabe);//benutzer eingabe einlesen 
    
            //ueberpruefen ob zahl bereits eingegeben wurde 
            if(!Contains(vektor,eingabe,sizeof(vektor)/sizeof(vektor[0]))) 
            { 
                printf("Ausgabe: %i \n",eingabe); 
                    vektor[i]=eingabe; 
            } 
            //else 
            //    printf("%i wurde breits eingegeben\n",eingabe);     
    } 
    
        return  0; 
    }
    

    So sieht es nun aus. DANKE schonmal! Das einzige , was nicht richtig geht, ist die else funktion, denke ich.
    Wenn ich zwei Zahlen( die selben wie z.B 3 und dann nochmal 3 eingebe) dann sagt er nicht: 3 wurde bereits eingegeben.



  • Die Zeile ist ja auch auskommentiert -.- Außerdem solltest du das Array sehr wohl initialisieren:

    for (i = 0; i < 10; ++i)
        {
            vektor[i] = 0;
        }
    

Anmelden zum Antworten