Ergebnis 1 bis 4 von 4
  1. #1
    Liebe (Amor) Avatar von Cyber Tjak
    Registriert seit
    16.03.2010
    Beiträge
    231

    Standard [C] Sammelthread fuer Anfaenger

    Da ich nun angefangen habe C zu lernen (mit dem Buch "C von A bis Z") & das sture Lesen mir sehr schwer faellt, habe ich mich nach einer kurzen Unterhaltung mit p0nny dazu entschlossen die Source-Codes + ein paar weiterer Kleinigkeiten in einen Sammelthread abzutippen + so gut erklaeren wie ich's kann (erhofft euch bloß nichts großes!).


    Ich bin der Stoff aus dem die Traeume sind.

    &


  2. #2
    Liebe (Amor) Avatar von Cyber Tjak
    Registriert seit
    16.03.2010
    Beiträge
    231

    Standard "Hallo Welt" in C

    "Hallo Welt" in C


    Das Ziel dieses Programms ist es, die Textfolge "Hallo Welt" auf dem Bildschirm auszugeben.
    Code:
    /* hallo.c */
    #include <stdio.h>
    
    int main (void) {
        printf("Hallo Welt\n");
        return 0;
    }
    Bild + Download:


    Jetzt werden wir das erste Programm in seine einzelnen Bestandteile zerlegen und es uns Schritt fuer Schritt ansehen.
    Code:
    #include <stdio.h>
    #include ist kein direkter Bestandteil der Sprache C, sondern ein Befehl des Praeprozessors. Der Praeprozessor ist ein Teil des Compilers, der nicht das Programm uebersetzt, sondern kontrollierend nicht beleibende Aenderungen im Programmtext vornimmt. Diese Aenderungen sind jedoch nur temporaer.

    Praeprozessorbefehle erkennnen Sie m vorgestellen #-Zeichen. Kompilieren Sie das Programm noch einmal ohne #include <stdio.h>, dann sollte eine Fehlermeldung erfolgen wie z.B. die folgende:
    Code:
    Error, function 'printf' should have a prototype.
    printf() kommt doch im Programm vor? Richtig, printf() ist eine (Standard-)Funktion, die in #include <stdio.h> deklariert ist. include-Dateien nennt man auch Headerdateien. Suchen Sie das Verzeichnis INCLUDE auf Ihrem System (unter Linux ist das typischerweise /usr/include oder /usr/bin/include un bei MS Windows z.B. C:\Name_des_Compilers\include), und Sie werden noch viele andere Headerdateien darin entdecken, die spaeter noch Verwendung finden.

    Die Abkuerzung stdio steht fuer Standard-Input/Output, also Standard-Ein-/Ausgabe. Ich werde noch oefter auf die Headerdateien eingehen, die ohnehin in jedem Programm benoetigt werden. Spaeter werden Sie auch eigene Headerdateien entwerfern und im Programm einbinden.


    Sehen wir uns nun weiter die Programmausfuehrung an:
    Code:
    int man(void)
    Hier beginnt das Hauptprogramm. Eine main-Funktion wird immer benoetigt, damit der Compiler weiß, wo er beginnen muss, das Programm zu uebersetzen. Auch wenn spaeter mehrere Module (Funktionen), also mehrere Quellcode-Dateien, kompiliert werden (d.h. zu einer ausfuehrbaren Datei gebunden werden), benoetigen Sie immer eine main-Funktion. main heißt auf Deutsch so viel wie "Hauptfunktion". Das void in der main()-Funktion steht fuer einen "leeren" Datentyp. void koennten Sie hier auch ganz weglassen - allerdings soll hier nicht unerwaehnt bleiben, dass () und ( void ) in C++ nicht dasselbe sind. Sofern Sie also Ihre Programme erweitern wollen, sollten Sie es gleich angeben.

    int steht fuer eine Ganzzahl. Im Fall einer Funktion bedeutet dies, dass sie einen Rueckgabewert hat, der vom Typ int ist. In diesem Programm bekommt die main-Funktion den Rueckgabewert 0 durch folgenden Aufruf:
    Code:
    return 0;
    Das bedeutet: Das Programm wurde ordnungsgemaeß beendet. Es wird also mit return hier der Funktion main der Wert 0 zurueckgegeben.
    Wir machen zunaechst mit
    Code:
    {
        printf(".....");
    }
    weiter. Zwischen den geschweiften Klammern steht der Anweisungsblock. Das heißt, in diesem Block befinden sich alle Anweisungen, die die Funktion main() aufzufuehren hat. Natuerlich koennen innerhalb eines Anweisungsblocks weitere Anweisungsbloecke verwendet werden. Das hoert sich komplizierter an, als es ist. Darauf gehe ich spaeter noch ein.

    Merke: Geschweifte Klammern fassen Anweisungen zu einem Block zusammen.
    Und was geschieht in diesem Anweisungsblock?
    Code:
    printf("Hallo Welt\n");
    printf() (Print to File) ist eine Funktion, die in der Headerdatei stdio.h deklariert ist, wie bereits erwaehnt wurde. Deswegen kann der Compiler, wenn Sie diese Headerdatei nicht im Programm angegeben haben, nichts mit printf() anfangen. Mit der Funktion printf() kann eine beliebige Stringkonstante formatiert auf dem Bildschirm ausgegeben werden. Die Stringkonstante, in diesem Fall "Hallo Welt", die ausgegeben wird, steht immer zwischen zwei Hochkommata ("Stingkonstante"). Es ist nicht erlaubt, eine Stringkonstante ueber das Zeilenende fortzusetzen, wie etwa in folgendem Beispiel:
    Code:
    printf("Dies ist in C
    nicht erlaubt");
    Es gibt aber eine Ausnahme von dieser Regel: indem Sie einen \ (Backslash) setzen. Hierzu ein Beispiel:
    Code:
    printf("Hier ist die Ausnahme von der Regel \
    dies hier ist erlaubt, dank Backslash");
    Sie sollten aber dabei beachten, dass alle Leerzeichen nach dem Backslash in der naechsten Zeilen ebenfalls bei der Ausgabe beruecksichtigt werden. Das Zeichen '\n' in der Funktion printf() ist ein Steuerzeichen. Es bedeutet newline und erzeugt auf dem Bildschirm einen Zeilenvorschub, wie er mit der Tastatur durch die ENTER-Taste ausgeloest wird.

    Kommen wir jetzt zum Semikolon (;): Es wird hauptsaechlich dazu verwendet, das Ende einer Anweisung anzuzeigen. Der Compiler weiß dann, dass hier das Ende der Anweisung von printf() ist, und faehrt nach der Abarbeitung der Anweisung mit der naechsten Zeile bzw. Anweisung fort. Natuerlich hat das Semikolon keine Wirkung, wenn es in einer Stringkonstante verwendet wird:
    Code:
    printf("Hallo; Welt\n");
    Ausgabe:
    Hallo; Welt

    Merke: Anweisungen, denen kein Anweisungsblock folgt, werden mit einem Semikolon abgeschlossen.
    Geändert von Cyber Tjak (16.10.2011 um 00:01 Uhr)


    Ich bin der Stoff aus dem die Traeume sind.

    &


  3. Folgende Benutzer haben sich für diesen Beitrag bedankt:

    J0hn.X3r (27.09.2011)

  4. #3
    Liebe (Amor) Avatar von Cyber Tjak
    Registriert seit
    16.03.2010
    Beiträge
    231

    Standard Formatierte Ein-/Ausgabe mit "scanf()" und "printf()"

    Die in diesem Post vorgestellten Funktionen printf() und scanf() sind recht gut fuer den Einstieg geeignet, stellen allerdings keinesfalls das Nonplusultra in dar. Ganz im Gegenteil: Beide Funktionen sind eher als sicherheitskritisch zu betrachten und in der Praxis mit Vorsicht zu genießen (Stichwort: "Format String Exploits")

    Die Funktion printf() duerfte aus dem letzten Post bekannt sein. scanf() ist eine Funktion, mit der Werte unterschiedlicher Datentypen formatiert eingelesen werden. Eingelesen wird dabei von der Standardeingabe (stdin). Mit Standardeingabe ist normalerweise die Tastatur gemeint. Hierzu ein Beispiel mit der Funktion scanf():
    Code:
    /* scanfl.c */
    #include <stdio.h>
    
    int main (void) {
    	int i;		/* ein ganzzahliger Datentyp */
    	printf("Bitte geben Sie eine Zahl ein: ");
    	scanf("%d", &i);		/* Wartet auf die Eingabe. */
    	printf("Die Zahl, die Sie eingegeben haben, war %d\n",i);
    	return 0;
    }
    Bild + Download:


    Wenn alles korrekt laeuft, wird nach einer Zahl gefragt. Nun wird durch den Anwender eine Zahl eingegeben & mit ENTER bestaetigt. Anschließend gibt das Programm die eingegebene Zahl wieder aus und wird beendet.


    Das Formatzeichen %d steht fuer die formatierte Eingabe einer dezimalen Zahl. Doch was bedeutet das Zeichen "&" hier?


    Der Adressoperator "&"
    Eine Variable kann in die vier folgenden Einzelteile zerlegt werden:
    • Datentyp
    • Name der Variable
    • Speicheradresse der Variable
    • Wert der Variable


    Im Programmbeispiel von oben heißt das konkret: Der Datentyp ist int, der Name ist i und die Adresse wird waehrend der Laufzeit zugewiesen (darauf hat der Coder keinen Einfluss). Die Speicheradresse sei hier z.B. 0000:123A. Der Wert ist der, den man mit scanf() noch eingeben muss.

    Eine Variable im Speicher (vereinfacht dargestellt):
    Code:
    _____________________________________________________________________________________________
    │											     │
    │											     │
    │	Datentyp		│	 Name  		│    Speicheradresse   	│  Wert      │
    │											     │
    │____________________________________________________________________________________________│
    │											     │
    │											     │
    │	    int    		│ 	    i    	│      0000:123A     	│    5       │
    │											     │
    │____________________________________________________________________________________________│
    Das &-Zeichen ist nicht anderes als der Adressoperator. Dies bedeutet hier, dass der Variablen i vom Typ int mit der Speicheradresse 0000:123A der Wert 5 zugewiesen wird. Oder einfacher: Verschickt man eine E-Mail an jemanden, ohne die E-Mail Adresse anzugeben?

    Achtung: Ein Fehler, den Anfaenger haeufig machen ist das Weglassen des Adressoperators &.

    Auch wenn scanf() das Gegenstueck zu printf() ist uns sich beide in ihrer Schreibweise aehneln, sollte man nicht auf die Idee kommen, Folgendes zu schreiben:
    Code:
    /* FALSCH */
    scanf("Bitte geben Sie eine Zahl ein: %d\n", &zahl);
    Das funktioniert deshalb nicht, weil scanf() fuer die Standardeingabe und printf() fuer die Standardausgabe programmiert ist, wobei die Standardausgabe auf der Kommandozeile auch umgeleitet werden kann.
    Geändert von Cyber Tjak (18.10.2011 um 16:37 Uhr)


    Ich bin der Stoff aus dem die Traeume sind.

    &


  5. #4
    Fortgeschrittener Avatar von DUKECUNT_OF_ASSRAPE
    Registriert seit
    17.10.2011
    Beiträge
    34

    Standard

    Ich sehe in dem ganzen keinen weiteren Sinn, ausser zum Vertreiben der Langeweile und eventuell um das Gelernte zu festigen. Wenn jemand C lernen will, soll er sich gefälligst auch ein Buch kaufen und nicht irgendwelche Tutorials befolgen.

  6. Folgende Benutzer haben sich für diesen Beitrag bedankt:

    aKiller47 (21.10.2011)

Ähnliche Themen

  1. Anfaenger in Sachen Wlan (WPA2)
    Von Sl!va im Forum Wireless-Lan
    Antworten: 8
    Letzter Beitrag: 12.03.2010, 21:49
  2. GTA IV Sammelthread
    Von StefanW im Forum Games
    Antworten: 19
    Letzter Beitrag: 26.12.2008, 10:52

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •