FAQ

Tutorials.at
Verfügbare Informationen zu "FAQ"

  • Qualität des Beitrags: 0 Sterne
  • Beteiligte Poster: Dirty Oerty - DrPhil_Guth
  • Forum: Tutorials.at
  • Forenbeschreibung: Programmierforum
  • aus dem Unterforum: C / C++
  • Antworten: 10
  • Forum gestartet am: Mittwoch 19.04.2006
  • Sprache: deutsch
  • Link zum Originaltopic: FAQ
  • Letzte Antwort: vor 16 Jahren, 5 Monaten, 4 Tagen, 21 Minuten
  • Alle Beiträge und Antworten zu "FAQ"

    Re: FAQ

    Dirty Oerty - 29.03.2007, 15:37

    FAQ
    Das is die FAQ für den C/C++/C#-Bereich

    Bitte erst hier lesen und falls dann noch etwas unklar ist posten.
    Danke :D
    ------------------------------------------------------------

    1. Wie mache ich mein Programm so dass es sich das Fenster nicht sofort schließt nachdem das Programm fertig ist?
    *
    2. Hilfe! Mein Turbo C funktioniert nicht und gibt seltsame Fehler aus!
    *
    3. HILFEEEE!!! PROBLEM!!!!!
    *
    4. Wie debugge ich Richtig?
    *
    5. Wie schreibe ich lesbaren Code ?
    *
    6. Ich möchte gerne wissen wie man in C die Schriftfarbe einzeln ändern kann
    *
    7. Wo findet man Tutorials?
    *
    8. Wie und warum soll ich den Eingabepuffer löschen?
    *
    9. Was kann man sich unter einer Objektorientierten Programmiersprache vorstellen?

    ------------------------------------------------------------
    (wer hier was drin haben will, einfach per pn an mich)



    Re: FAQ

    Dirty Oerty - 23.04.2007, 16:15


    FAQ - FRAGE 1
    F: Wie mache ich mein Programm so dass es sich das Fenster nicht sofort schließt nachdem das Programm fertig ist?

    A: Also als erses möchte ich euch darauf hinweisen, dass eure ersten Programme ws. Konsolenprogramme sind. Diese sollte man aus der Konsole starten.
    Falls ihr sie doch mit einem einfachen doppelklick startet, dann müsst ihr das programm irgendwie zum warten bringen. Dafür gibt es mehrer möglichkeiten:

    C++:

    Code: cin.getline()
    cin.get()


    C:

    Code: getchar();


    Diese funktionen warten, bis etwas eingegeben wird und dann mit der enter Taste bestätigt wird.
    Somit könnt ihr erreichen, dass euer Programm erst nach einem druck auf die Enter Taste beendet wird.

    Rein der vollständigkeit halber: Wenn ihr auf einem Micro$oft betriebssystem arbeitet, und auch keinen Wert auf Portabilität legt und dass euer Programm nur auf diesem armseligen betriebssystem laufen soll, und ihr dabei alle anderen user ignoriert, dann könnt ihr diese funktion verwenden:

    Code: #include <conio.h>

    getch();


    Von: DrPhil_Guth



    Re: FAQ

    Dirty Oerty - 23.04.2007, 20:08


    FAQ - FRAGE 2
    F: Hilfe! Mein Turbo C funktioniert nicht und gibt seltsame Fehler aus!

    A: Ich möchte gleich am Anfang erwähnen, dass TC eine der schlechtesten IDE's ist, die man finden kann. Bitte besorgt euch
    Dev-C++, Code::Blocks oder Microsoft Visual Studio 2005.
    Falls ihr wirklich unbedingt den schlechteren compiler verwenden wollt, dann befolgt folgende schritte bei Problemen:
    1. Überprüft ob euer Programm völlig fehlerfrei ist. Tippt dieses Programm ab (zeichen für zeichen!!!) und überfrüft, ob der Compiler diesen ocde ausführen kann. Wenn er es kann, dann liegt der Fehler in eurem Programm.

    Code: #include <stdio.h>

    int main()
    {

        printf("Hello World!\n");
        return 0;
    }

    2. Falls nicht, dann überprüft ob ihr auch alle Dateien aus den 3 verschiedenen Ordner in 1 (einen) ordner reingetan habt. Dies ist meistens der Fehler.

    3. Falls es dann immer noch nicht geht, löscht TC und installiert es neu. Falls es dann noch immer nicht geht, besorgt euch nen neuen Compiler.

    [edit]
    Wegen diverser Nachfragen im Forum ist mir klar geworden dass ich mich in diesem Post nicht direkt genug ausgedrückt habe. Ich hoffe niemand fühlt sich auf den Schlips getreten, ich drücke nur meine persönliche meinung aus. Die lautet wie folgt:

    TurboC IST MÜLL! HOLT EUCH NEN ANDEREN COMPILER!!!


    [/edit]

    Von: DrPhil_Guth



    Re: FAQ

    DrPhil_Guth - 25.04.2007, 20:51


    FAQ - Frage 3
    F: HILFEEEE!!! PROBLEM!!!!!
    Ich kann mein Programm nicht kompilieren, es kommen Tausende Fehler und dieses Forum ist so toll und ihr könnt mir sicher helfen!


    A: So, das ist natürlich keine richtige Frage. Sie ist Trotzdem im FAQ (Frequently Asked Questions), weil sie leider häufig gestellt wird.
    Also, an alle Leute die so eine Frage verfassen würden: Finger Weg vom Senden Button! Lest die folgenden Punkte: (Wer sie nicht liest, wird das Thema geschlossen und ihr werdet von einem Moderator auf diese FAQ aufmerksam gemacht)

    1) Zuerst lest ihr mal das Tutorial. Damit werden meist schon der Großteil der Fragen beantwortet. Falls ihrs nicht verstanden habt, lest es nochmal. Ihr habts noch immer nicht Verstanden? Nochmal.


    2) Debuggt euer Programm selbst. siehe FAQ Frage 4, wie Debugge ich ein Programm. Wenn dann noch was nicht klar ist, geht weiter zu Punkt 3)


    3) Überlegt euch nen Titel, der aussagekräftiger ist. Nur weil ihr auf der Rufzeichen- Taste drauf bleiben könnt, heißt das nicht dass euren post wer lesen wird. Posts mit so einem Titel sollten sofort gelöscht werden.
    Stattdessen wählt einen Titel wie "Compiler meldet Fehler bei if- abfrage" oder "Programm stürzt bei Aufruf der Funktion exampleFunction() ab."

    4) Schreibt in normalem Deutsch, möglichst unter Beachtung von Grammatik und Groß- Klein Schreibung (na gut, dass muss nicht sein, ich hab auch Probleme... :oops:) Bitte schreibt ganze Sätze, die mit 1 (einem) Satzzeichen aufhören, die auch andere sein können als Rufzeichen.

    5) Beschreibt euer Problem, und gebt möglichst viel Info. Aber nicht eure Haarfarbe, Schulbildung, Alter oder sonst was. Mit Info meine ich Euren Compiler, euer Betriebssystem, natürlich auch euren Code und die Fehlermeldungen.
    Den Code bitte in einen [code] block, und zwar in dem ihr den Code postet, ihn markiert und auf die "Code" schaltfläche klickt. Versucht euren Code lesbar zu schreiben. Siehe FAQ Frage 5, Wie schreibe ich Lesbaren Code.

    6) Erwartet nicht sofort eine Antwort: Es gibt einen Grund, wieso noch nicht gleich geantwortet wurde. Entweder hatten die Leute, die helfen konnten noch keine Zeit zum Antworten gehabt, oder eure Frage ist schlecht gestellt. Bitte alle Punkte noch ein mal Lesen. Posts ähnlich wie diese: "Kann mir keiner Helfen", helfen meistens nicht, im Gegenteil.

    7) Bemüht euch selbst um euer Problem. Wartet nicht, bis ihr die Lösung präsentiert bekommt, sondern arbeitet weiter daran. Falls ihr sie gefunden habt, bitte schreibt einen Bericht, was der Fehler war, das hilft dem nächsten, der das gleiche Problem hat.

    So das wars... Viel Spaß beim Posten.



    Re: FAQ

    DrPhil_Guth - 25.04.2007, 21:01


    FAQ - Frage 4
    F: Wie debugge ich Richtig?

    A: Als erstes Lest bitte das Tutorial, und zwar so lange bis ihr sicher seid dass ihr alles verstanden habt.
    Falls ihr verstanden habt, wie etwas funktionieren sollte, es funktioniert aber nicht wies soll, beschuldigt nie den PC oder den Compiler. IHR seid schuld. Überprüft euren Code nun auf die neu gewonnenen Erkenntnisse , und ob ihr sie richtig angewendet habt.

    Überprüft den Code auf Tippfehler, auch groß- klein Schreibung, und achtet besonders auf nicht geschlossene Klammern oder fehlende Semikolone. Seht euch nochmal genauer die Syntax von einigen Elementen an, die nah beim Fehler liegen.

    Falls euer Programm zwar kompilierbar ist, aber es nicht so läuft wie es soll, dann versucht den Fehler selbst zu finden: sucht die stelle wo das Fehlverhalten auftritt (z.B. durch Zwischenausgaben), probiert herum und ändert was. Vielleicht habt ihr nicht ganz verstanden, wie etwas Funktioniert.
    Eine gute Methode ist die Zerlegung in kleinere Teilaufgaben: wenn eine Funktioniert, die andere nicht dann wisst ihr was los ist.

    Wenn ihr mit Arrays hantiert, achtet darauf, dass ihr nicht über die Grenzen drüberschreibt. Sonst gibts ne "Schutzverletzung" oder "Segmantation Fault" oder "Problembericht Senden", wie das bei WinXP heißt.

    Den ganzen Prozess nennt man "Debuggen". Jeder Programmierer muss ihn beherrschen: jeder macht Fehler. Doch ihr solltet eure als Programmierer selbst finden.



    Re: FAQ

    DrPhil_Guth - 26.04.2007, 12:05


    FAQ - Frage 5

    F: Wie schreibe ich lesbaren Code ?

    A: Also hier gibt es ein paar Grundregeln, und einige die jedem Programmierer selbst überlassen sind.

    Die wichtigste: Macht Absätze und einrückungen!
    Formatiert euren Code so, dass ihr viel Platz habt, der Code in Sinneinheiten gegliedert ist.
    Jede verzweigung und Schleife sollte eingerückt werden. Ein kleiner Tipp von mir: macht bei jeder schließenden Klammer die bedingung oder den schleifenkopf der öffnenden dazu:
    Code:
    if (bedingung)
    {
        anweisug1();
       
        for (int i; i<=grenze;i++)
        {
            anweisung2();
        }/*for (int i; i<=grenze;i++)*/
    } /* if(bedingung */

    Lasst Platz, versucht nicht kompakt zu schreiben, im Gegenteil.
    Ihr solltet es vermeiden zu viel in eine Zeile zu schreiben. Versucht eine Zeile pro anweisung zu verwenden, und wenn die zu lang ist, dann gliedert sie eben auf mehrere Zeilen auf.

    Findet treffende variablennamen, die auch länger sein können. Manche bevorzugen die Ungarische Notation, das muss aber nicht unbedingt sein.
    Ihr könnt auch mehrere Wörter verwenden. Entweder sollten diese dann durch einen unterstrich "_" getrennt werden: variablen_name oder durch Groß klein schreibung: variablenName.
    Deklariert nie mehr als eine Variable pro zeile!
    Wo man die Variablen deklarieren sollte, da streiten sich die Geister. Die Einen sagen dort wo sie verwendet werden, weil man dann genau sieht wozu sie gebraucht werden, die Anderen sagen am Anfang, weil man dann alle beisammen hat. Ich verwende eine Mischung: die meisten Variablen am Anfang, und Hilfsvariablen die ich kurz für die berechnung brauche vor ort.

    Ganz wichtig: Kommentare! Fügt kommentare überall ein, um euren Code klarer zu gestalten.
    Das bedeutet: Bei Variablendeklarationen, wofür die Variable verwendet wird.
    Bei funktionsdeklarationen, wofür die Funktion verwendet wird, was für Parameter sie erwartet und Was sie zurückgibt.
    Und vor allem bei unklaren oder komplizierten Codestellen! Ihr tut euch selbst einen gefallen: nach 2 monaten habt ihr keine ahnung mehr, wieso ihr was geschrieben habt.



    Re: FAQ

    DrPhil_Guth - 29.04.2007, 19:11


    FAQ - Frage 6

    F: Ich möchte gerne wissen wie man in C die Schriftfarbe einzeln ändern kann

    Also: gleich mal Vorweg: es gibt keinen Standardisierten Weg die Farbe der Konsole zu verändern.
    Alle nicht Standardisierten(deswegen auch nicht Portable) wege führen über Bibliotheken (z.B. die WinAPI, ncurses) oder über Systemaufrufe, wie z.B. system(""), denen ihr die Richtigen Systemaufrufe übergebt, für Farbe wäre das unter DOS "Color XX", wobei beides Hexadezimalzahlen sind, die erste Zahl für die Hintergrundfarbe steht und die zweite für die Schriftfarbe. (Danke für den Hinweis an Mitti!) Seid euch aber bewusst dass das gar nichts mit C zu tun hat sondern nur mit Betriebssystemaufrufen. Diese können dann natürlich nur auf einem Betriebssystem verwendet werden.
    Wenn ihr unter Linux oder Apple seid, müsst ihr die "Terminaleigenschaften" verändern. Das geht am besten mit der ncurses bibliothek.
    Euch gefällt das nicht? Nun ja, die Konsole ist nicht dafür da dinge bunt zu gestalten sondern schnell und effizient informationen zu übertragen. Für Klickibunti seht euch an wie man echte Windows- Programme, auch genannt "Fensterprogramme" schreibt.



    Re: FAQ

    DrPhil_Guth - 30.04.2007, 21:37


    FAQ - Frage 7

    F: Wo findet man Tutorials?

    A: Also es gibt Tausende von Tutorials, alle zu finden bei Google.
    Hier mal eine Liste von einigen Tutorials.

    Allgemeine:
    C http://www.pronix.de/pronix-4.html
    C http://www.c-programme.de/
    C++ http://www.iphpbb.com/board/ftopic-53411326nx34195-111.html


    Linux:
    C http://wwwuser.gwdg.de/~kboehm/ebook/inhalt.html
    C http://www.pronix.de/pronix-6.html

    MS Windows:
    http://www.winprog.org/tutorial/
    http://www.win-api.de/tutorials.php

    ----
    Ein Dankeschön an AQE89, der diese Antwort verfasst hat!



    Re: FAQ

    DrPhil_Guth - 15.06.2007, 11:31


    FAQ - Frage 8

    Wie und warum soll ich den Eingabepuffer löschen?

    Wahrscheinlich kennt jeder das problem vom Löschen des Eingabepuffers. Häufig, wenn eingaben einfach übersprungen werden und seltsame Werte oder Werte die vorher eingegeben wurden, ist der Eingabepuffer schuld.
    Wenn man nämlich etwas eingibt, dann kommen die Zeichen nicht direkt an euer Programm, sondern ein einen Puffer. Aus diesem Puffer lesen funktionen dann die Zeichen heraus, und erst dann stehen sie dem Programm zur verfügung.
    Allerdings kann es zu Problemen kommen: Wenn die eingabe falsch war, (wenn der Benutzer statt einer Zahl einen Buchstaben eingibt) , dann lesen manche funktionen (unter anderem scanf() ) die Zeichen nicht ein. Die Folge davon ist, dass die Zeichen im Puffer bleiben und vom nächsten Funktionsaufruf auch wieder gelesen werden. Falls diese die Zeichen auch nicht liest, dann werden sie auch stehengelassen, und so weiter. So bin ich schon in lästigen Endlosschleifen gelandet.
    Nun, jetzt zur Frage: Wie lösche ich den Eingabepuffer. Gleichmal vorweg:

    Code: fflush(stdin); funktioniert nicht.
    Diese funktion wird dazu benutzt den AUSGABEpuffer zu leeren. Für Eingabepuffer ist das verhalten undefiniert. Das bedeutet so viel wie "nicht einsetzen, und wenn doch dann sieh zu was du daraus machst". Leider wird diese Möglichkeit von einigen Büchern und Tutorials vorgeschlagen, weil sie unter manchen Betriebssystemen funktioniert.

    Was allerdings funktionieren sollte ist das hier:
    Code:
    int c;

    while ((c = getchar()) != EOF && c != '\n');

    Was es tut: Es liest solange zeichen vom eingabestrom ein, bis entweder das Ende erreicht ist oder eine newline Zeichen. Wenn das geschehen ist, ist der Puffer leer. ACHTUNG: c muss int und nicht char sein, weil getcher int zurückliefert und EOF auch int ist. Sonst kann es bei manchen Compilern wegen der Konvertierung dazu kommen, dass EOF niemals erreicht wird.(falls es wen interessiert, das hängt davon ab ob char signed oder unsigned ist) In manchen fällen kann das zu einer Endlosschleife werden.


    Die nächste möglichkeit ist diese hier:
    Code:
    setvbuf(stdin,NULL,_IONBF,0);
    setvbuf(stdin,NULL,_IOFBF,BUFSIZ);

    Was es tut: setvbuf() ist dazu Streampuffer (u.A. auch den von stdin, der Eingabe) zu manipulieren. Der erste funktionsaufruf schaltet den Puffer aus. Dabei werden alle Zeichen verworfen. Der zweite stellt den Puffer wieder her.

    Für alle die C++ programmieren: Code:
    std::cin.clear();
    std::cin.ignore(std::cin.rdbuf->in_avail());

    Also erstmal HÄ? Ist nicht so schwer. Also, cin.clear() löscht alle Fehlerflags von cin.
    cin.ignore() ignoriert (liest aus und verwirft) eine bestimmte Anzahl von Zeichen. Diese anzahl von zeichen sollte der Anzahl der Zeichen im Eingabepuffer entsprechen. Woher sollen wir wissen wie viele das sind? Wir lassen uns erstmal mit cin.rdbuf()den Zeiger auf den Puffer zurückgeben. Dann lassen wir uns die anzahl der verfügbaren (available) Zeichen von in_avail() zurückgeben. Wer mir nicht glaubt:
    http://www.cplusplus.com/reference/iostream/ios/clear.html
    http://www.cplusplus.com/reference/iostream/istream/ignore.html
    http://www.cplusplus.com/reference/iostream/ios/rdbuf.html
    http://www.cplusplus.com/reference/iostream/streambuf/in_avail.html

    So, nun könnt ihr getrost von der Tastatur eingaben Abfragen :-)



    Re: FAQ

    DrPhil_Guth - 23.11.2007, 21:31


    FAQ - Frage 9

    Was kann man sich unter einer Objektorientierten Programmiersprache vorstellen?

    C ist eine Imperative Programmiersprache, C++ ist die Rettung der Welt weil sie Objektorientiert ist.
    So oder so ähnlich liest man es recht häufig in Büchern und Tutorials.
    Was genau man sich unter diesen begriffen eigentlich vorstellen kann, wird hier erklärt:

    Imperativ bedeutet, dass Du Befehle wie ein Kochrezept runterschreibst. Du gibst Befehle: Erst mache das, anschließend das, dann das. Erst Wasser in den Topf, dann Nudeln dazu, erhitzen, Wasser abschütten, Nudeln auf Teller, Nudeln essen. Die Reihenfolge ist nicht willkürlich. Nudeln essen, Wasser abschütten, erhitzen, Wasser in den Topf... das führt spätestens beim Nudeln in den Topf geben zu einer Exception, weil die Nudeln schon gegessen wurden. ;-)

    In C++ programmiert man ebenfalls imperativ. Man schreibt aber nicht mehr ein (1,0) Programme, sondern sehr viele, kleine Programme.

    Man schreibt Objekte. Diese Objekte interagieren miteinander. Das Objekt Nudeln verweigert z.B. das Verspeisen, wenn sie nicht al dente sind, Töpfe wollen nicht erhitzt werden, wenn nix zum Erhitzen drin ist und Herde erhitzen Gefäße nur, wenn die Gefäße die Erlaubnis dazu geben.
    Die Progamme (Objekte) lösen Probleme wohlüberlegter und sind dennoch für sich genommen kleiner und überschaubarer als ein großes Programm zum Nudeln kochen. Zusammengenommen sind sie aber deutlich größer. Dafür kannst Du den Herd auch nutzen, um Pfannen zu erhitzen und wenn Du Suppe kochen willst, hast Du den Topf dafür auch schon programmiert. Objekte sind (sofern sie sinnvoll programmiert wurden) wiederverwendbar.


    Ein großes großes dankeschön an dieser Stelle an Xin, der diesen klärenden Text geschrieben hat.



    Mit folgendem Code, können Sie den Beitrag ganz bequem auf ihrer Homepage verlinken



    Weitere Beiträge aus dem Forum Tutorials.at

    Blender-Problem - gepostet von toby-man am Samstag 06.10.2007
    COMPILER - gepostet von BASIC am Samstag 08.07.2006
    C und Grafik ?? - gepostet von Dirty Oerty am Donnerstag 04.01.2007
    Englischvokabelverwalter - gepostet von Dragorad am Montag 23.10.2006
    Datei öffnen - gepostet von ringo am Donnerstag 23.08.2007
    C++ Buch - gepostet von Cookie am Dienstag 12.09.2006
    Mein Würfelprogramm funktioniert nicht richtig... - gepostet von Godmaster am Samstag 23.09.2006



    Ähnliche Beiträge wie "FAQ"

    Instazen FAQ - Aldente (Sonntag 12.03.2006)
    FAQ - kitschmonster (Donnerstag 09.11.2006)
    FAQ - Schokobecher (Freitag 10.11.2006)
    77 kiLLaZ Clan FAQ - Captain Pakko (Freitag 29.06.2007)
    Ach ich liebe unser FAQ - Admiral_Helmut (Mittwoch 27.12.2006)
    FAQ-Allgemein - veronika (Sonntag 28.01.2007)
    FAQ zur Geschichte des Zirkels - Ordinus (Samstag 24.12.2005)
    Agenten-FAQ - Max (Mittwoch 13.06.2007)
    Frage & Antwort MG / [FAQ] - FAQ - Lady of Death (Sonntag 24.09.2006)
    Faq zur Insel Monarchie - Lord Gargoyle (Donnerstag 22.09.2005)