Wie habt Ihr C gelernt?



  • Du willst Ziele haben? Kann ich dir geben:

    1. Fang erst mal mit einfachen Textausgaben an. Die Programme, die du am Anfang schreiben wirst, werden kaum über eine grafische Benutzeroberfläche (englisch GUI, Graphical User Interface) wie Windows verfügen, das passiert alles über die Konsole.

    2. Versuche, Werte von dem Eingabegeräte (unter der Konsole meistens die Tastatur) einzulesen und damit zu rechnen.

    3. Lerne, die verschiedenen mathematischen Optionen, Funktionen und Operatoren zu verwenden, damit du hinterher leicht eigene Algorithmen schreiben kannst.

    4. Verwende Schleifen und Abfragen, damit du auf die "Individualität" des Users reagieren kannst.

    5. Versuche, das "Teile und Herrsche"-Prinzip von Funktionen zu verstehen.

    6. Schreibe als "Blutiger Anfänger"-Abschluss einen konsolenbasierten Taschenrechner, der sich nicht aufhängt, wenn der Benutzer eine falsche Eingabe tätigt, die vier Grundrechenarten plus Division mit Rest (Modulo) unterstützt und sich erst dann beendet, wenn der Benutzer den richtigen Knopf drückt (und nicht nur einen Durchlauf "auf Biegen und Brechen" startet und sich danach beendet).

    Wenn du Aufgabe Nummer 6 durch hast, bist du kein blutiger Anfänger mehr und hast schon das minimale Grundgerüst für andere Sprachen darauf. Danach wird es mit Zeigern/Referenzen und Strukturen/Klassen schön schwer - damit haben Anfänger (und ich weiß, wovon ich spreche ;)) oft Probleme.



  • C war auch meine erste "richtige Sprache" und ich muss sagen das das Galileo "C von A bis Z" super zum lernen der Theorie geeignet hat ( die Vorlesungen waren nicht so berrauschend ; ) )
    Falls du noch keine konkreten Ideen fuer Aufgaben hast kannst ich dir die Aufgaben mit denen ich in Uni Programmieren gelernt habe geben.
    Die Aufgaben deckten von Schleifen, Ein- / Ausgabe, Arrays, rekursive Funktionen, (SDL) (grafische Ausgabe), Strukturen ziemlich viel ab.

    Beim Intresse einfach Bescheid geben.



  • DerMaddi schrieb:

    C von A bis Z" super zum lernen

    LOL 😃
    Der Schreibstil des Herrn scheint ja wirklich nicht schlecht zu sein, oder zieht das Buch die Anfänger nur wie die Fliegen an weil es gratis ist?



  • cooky451 schrieb:

    DerMaddi schrieb:

    C von A bis Z" super zum lernen

    LOL 😃
    Der Schreibstil des Herrn scheint ja wirklich nicht schlecht zu sein, oder zieht das Buch die Anfänger nur wie die Fliegen an weil es gratis ist?

    Es gibt glaube ich nichts schlimmeres! J.W Style halt. 🙄



  • -lowbyte- schrieb:

    cooky451 schrieb:

    DerMaddi schrieb:

    C von A bis Z" super zum lernen

    LOL 😃
    Der Schreibstil des Herrn scheint ja wirklich nicht schlecht zu sein, oder zieht das Buch die Anfänger nur wie die Fliegen an weil es gratis ist?

    Es gibt glaube ich nichts schlimmeres! J.W Style halt. 🙄

    Also mir wurde es von mehreren empfohlen, aber du hast moeglicherweise Recht cooky, denn ich war zu faul mir n Buch zu kaufen / auszuleihen ^^
    Beim Nachschaun in "Linkliste fuer Neulinge" seh ich grade, dass es hier im Forum wohl eh nicht auf volle Zustimmung trifft:

    alt!!1 schrieb:

    OpenBook C von A bis Z von Galileo Computing

    Edit by TactX: Das Buch "C von A bis Z" ist hier schon öfters wegen diverser Fehler aufgefallen. Dies sollte man im Hinterkopf haben wenn man das Buch liest und entsprechend kritisch hinterfragen (gilt natürlich für jede Veröffentlichung).

    Ich kenn zwar die konkreten Fehler nicht, aber ich konnte bis jetzt alle meine Programme bis zur Zufriedenheit des Compilers fertigstellen ; )



  • Dann warte bis hier Leute posten, die Dir ein paar nette Geschichte über J,W posten...dann wirste verstehen was ich meinte. Ich mag nämlich nicht mehr...

    Wenn Du Dich wirklich an alles haltest, was dieser Mann verzapft... dann kannste nicht C programmieren tut mir leid.



  • DerMaddi schrieb:

    Ich kenn zwar die konkreten Fehler nicht, aber ich konnte bis jetzt alle meine Programme bis zur Zufriedenheit des Compilers fertigstellen ; )

    Ich habe eigentlich kaum etwas aus dem Buch gelesen, aber jemand hat mir mal folgenden Ausschnitt geschickt:
    http://openbook.galileocomputing.de/c_von_a_bis_z/012_c_zeiger_006.htm#mj1d0c139ec6125f198a762880b480283f

    C von A bis Z schrieb:

    /* ptr13.c */
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define MAX 255
    
    char *eingabe(char *str) {
       char input[MAX];
    
       printf("Bitte \"%s\" eingeben: ",str);
       fgets(input, MAX, stdin);
       return strtok(input, "\n");
    }
    
    int main(void) {
       char *ptr;
    
       ptr = eingabe("Vorname");
       printf("Hallo %s\n", ptr);
       ptr = eingabe("Nachname");
       printf("%s, interssanter Nachname\n", ptr);
       return EXIT_SUCCESS;
    }
    

    Abgesehen davon, dass ich die Einrückung nicht mag, main(void) sinnlos ist, MAX eine unangenehm nichtssagende Konstante ist und die Funktion "eingabe" besser einen const char* als Parameter haben sollte, funktioniert strtok() nicht so wie hier gedacht.

    Lustigerweise erklärt er genau unter diesem Beispiel den Stack, merkt aber nicht, dass da was nicht stimmt 😃



  • cooky451 schrieb:

    Abgesehen davon, dass ich die Einrückung nicht mag

    😕 Meinst du, dass du den CodeBlockanfang "{" in eine neue Zeile machst oder was ist da falsch?

    cooky451 schrieb:

    main(void) sinnlos ist

    Punkt fuer dich, mir ehrlich gesagt nie aufgefallen ich schreib idR auch immer nur "int main()" oder zumindest.

    cooky451 schrieb:

    MAX eine unangenehm nichtssagende Konstante ist

    Bei 20 Zeilen Code...

    cooky451 schrieb:

    und die Funktion "eingabe" besser einen const char* als Parameter haben sollte

    2. Punkt fuer dich.

    cooky451 schrieb:

    funktioniert strtok() nicht so wie hier gedacht

    Hier bitte ich um Aufklaerung, die Funktion (habs sie mir grade zum ersten angeguckt cO) und ich seh irgendwie kein Fehler, ich weiss nur das die (unsichere - bufferoverflowgefaehrdete) Funktion gets() ein String ohne "\n" einliest und fgets mit. Das Newline Zeichen kann in dem Text nur ganz am Ende vorkommen, um die Eingabe zu beenden, also muss quasi der ganze String bis zu dem Zeichen zurueckgegeben werden.
    Hab ich einen Denkfehler drin oder seh ich den Fehler einfach nur nicht?
    Ich hab das Programm compiliert und es hat das gemacht was es sollte.



  • DerMaddi schrieb:

    cooky451 schrieb:

    main(void) sinnlos ist

    Punkt fuer dich, mir ehrlich gesagt nie aufgefallen ich schreib idR auch immer nur "int main()" oder zumindest.

    Also zumindest für einen echten C-Compiler macht es einen Unterschied, ob du das void schreibst.

    cooky451 schrieb:

    funktioniert strtok() nicht so wie hier gedacht

    Hier bitte ich um Aufklaerung, die Funktion (habs sie mir grade zum ersten angeguckt cO) und ich seh irgendwie kein Fehler, ich weiss nur das die (unsichere - bufferoverflowgefaehrdete) Funktion gets() ein String ohne "\n" einliest und fgets mit. Das Newline Zeichen kann in dem Text nur ganz am Ende vorkommen, um die Eingabe zu beenden, also muss quasi der ganze String bis zu dem Zeichen zurueckgegeben werden.
    Hab ich einen Denkfehler drin oder seh ich den Fehler einfach nur nicht?
    Ich hab das Programm compiliert und es hat das gemacht was es sollte.

    strtok() verändert den übergebenen String und gibt Zeiger darauf zurück. Und hier liegt das Problem imho nicht in strtok() sondern darin, worauf es angewendet wurde - das übergebene Array liegt in der Funktion eingabe() und wird am Ende des Funktionsaufrufes wieder freigegeben - was danach mit dem Inhalt des Arrays passiert ist Glückssache.



  • DerMaddi schrieb:

    Hier bitte ich um Aufklaerung

    Lies dir einfach das durch, was er weiter unten schreibt und halte im Hinterkopf, dass strtok() einen Zeiger auf input zurückgibt.

    Also zumindest für einen echten C-Compiler macht es einen Unterschied, ob du das void schreibst.

    Und sogar im Standard steht es mit void! Das muss ich wohl eindeutig zurückziehen.

    Edit:
    Ok, im Standard steht irgendwie sowohl int main(), als auch int main(void). Scheint Geschmackssache zu sein.



  • In der Schule 😃



  • noelino schrieb:

    In der Schule 😃

    Die Frage lautet: Wie, nicht Wo!



  • noelino schrieb:

    In der Schule

    Haha mein Infolehrer möchte mich nicht unterrichten lassen 😃


Anmelden zum Antworten