brauche hilfe bei Übungen



  • Hallo Community,

    ich habe hier paar Übungsaufgaben, die ich leider nicht lösen kann. Es wäre sehr nett von euch, wenn ihr mir helfen könntet und Kommentarzeilen schreiben würdet, damit ich es lernen kann bzw. erkennen kann, was ihr gemacht habt.

    [https://www2.pic-upload.de/thumb/33071436/Unbenannt.jpg

    MfG Mejo



  • Stelle deinen (bisherigen) Code hier rein. Umgeben mit Code-Tags.

    Ich kann das Bild nicht sehen. Daher wäre es ganz gut auch den Inhalt hier rein zu setzen.

    Ansonsten: https://www.c-plusplus.net/forum/136013





  • 🙄



  • #include <stdio.h>
    #include <math.h>
    #include <stdlib.h>
    
    struct FluxCapacitor
    {
        unsigned char* c_strig;
        unsigned int value;
    };
    
    int main(char a)
    {
    	time_t t;
    
    	srand((unsigned) time(&t)); //für die rand-funktion,damit es 
            //randomisiert ist
    
    	//createFluxCapacitor();
    
    	printf("%i",&a);
    
    return 0;
    }
    
    struct FluxCapacitor* createFluxCapacitor()
    {
    	struct FluxCapacitor a = {(unsigned char)(rand() %26 +65)};
    	return &a;
    }
    


  • Und was soll dein Code machen? Bzw. was soll der machen, wenn er fertig ist? Und was genau verstehst du nicht, was fehlt dir um das selber lösen zu können?


  • Mod

    * Du hast nur eines der beiden Attribute initialisiert.
    * Du hast versucht, die Zeichenkette mit nur einem Zeichen zu initialisieren.

    Ratschläge:
    * Testest du deinen Code auch? Nein. Tu es! Als erstes bietet sich das Schreiben einer Testfunktion an, die den Inhalt eines FluxCapacitors ausgibt. Dann hättest
    du sofort gesehen, dass da etwas nicht stimmt.
    * Wenn du casten musst, damit dein Code angenommen wird, heißt das höchstwahrscheinlich, dass dein Code falsch ist. Der Cast macht nur, dass der Compiler die Klappe hält.
    * Du hast (höchstwahrscheinlich aufgrund deiner Arbeitseinstellung) anscheinend komplett verpasst, wie C-Strings funktionieren. Das rächt sich nun. Du wirst die Aufgabe ohne dieses Wissen nicht lösen können. Bevor du deine bisherigen Hausaufgaben nicht nachgeholt hast, brauchst du es gar nicht weiter zu versuchen.

    Trost:
    * Die Aufgabenstellung deutet darauf hin, dass dein Lehrer nur mäßig C kann, jedenfalls viel zu wenig um es anderen Personen beizubringen. Viel verpasst du nicht in diesem Kurs.



  • Danke für deine Antwort, bisschen hast du mir geholfen 🙂



  • Eine Funktion muss vor dem Aufruf dem Compiler bekannt sein.
    Sonst kann er nicht überprüfen, ob die Parameter richtig sind, bzw diese nicht anpassen.

    Dies kann man erreichen, indem man die Funktion vorher deklariert oder gleich definiert.

    Und zu main: https://www.c-plusplus.net/forum/viewtopic.php?t=39346



  • habe was versucht, weiter komme ich nicht 😞

    #include <stdio.h>
    #include <math.h>
    #include <stdlib.h>
    
    struct FluxCapacitor
    {
        unsigned char* c_string;
        unsigned int value;
    };
    
    struct FluxCapacitor* createFluxCapacitor()
    {
    	struct FluxCapacitor* newItem = malloc(sizeof(struct FluxCapacitor));
    	newItem->value= (rand() %26 +65);
    	newItem->c_string= (rand() %26 +65);
    	//printf("%i",newItem->value);
    	return newItem;
    }
    
    int main()
    {
    
    	time_t t;
    
    	srand((unsigned) time(&t));
    
    	struct FluxCapacitor* b = createFluxCapacitor();
    	//struct FluxCapacitor* newItem = malloc(sizeof(struct FluxCapacitor));
    	printf("%i",b->value);
    
    return 0;
    }
    


  • Warum nur Zufallswerte von 65 bis 91? Das macht für Buchstaben einen gewissen Sinn, aber nicht für Zahlen?

    Dein C-String wird so auch nicht funktionieren. Wobei ich einen Random String zu erstellen schon etwas gemein finde (was soll random sein... länge, inhalt, wenn inhalt, welche Zeichen sind erlaubt etc)

    Ich habe da mal was gebastelt, habe aber nichts kommentiert und geht bestimmt auch in viel schöner.

    #include <stdio.h>
    #include <math.h>
    #include <stdlib.h>
    #include <time.h>
    struct FluxCapacitor
    {
        unsigned char* c_string;
        unsigned int value;
    };
    
    struct FluxCapacitor* createFluxCapacitor()
    {
        struct FluxCapacitor* newItem = malloc(sizeof(struct FluxCapacitor));
        newItem->value= (rand() %26 +65);
        //printf("%i",newItem->value);
        int length = 100; //irgendwo muss eine länge her kommen, kann auch zufällig sein
        newItem->c_string= malloc(sizeof(char) * (length +1));
        if (newItem->c_string) {            
           for (int n = 0;n < length;n++) {            
           int random = (rand() %26 +65);
           newItem->c_string[n] = (char)random;
           }
        newItem->c_string[length] = '\0';
        }
        return newItem;
    }
    
    int main()
    {
    
        time_t t;
    
        srand((unsigned) time(&t));
    
        struct FluxCapacitor* b = createFluxCapacitor();
        //struct FluxCapacitor* newItem = malloc(sizeof(struct FluxCapacitor));
        printf("%i\n",b->value);
        printf("%s\n",b->c_string);
        free(b->c_string);
        free(b);
    
    return 0;
    }
    

    Edit: Einrückung repariert


Log in to reply