1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

c++ Fragen

Discussion in 'Programmieren' started by shivan, Jun 25, 2009.

Thread Status:
Not open for further replies.
  1. shivan

    shivan Byte

    Hallo zusammen!

    Ich hab einige Fragen zu C++ und würde mich sehr auf Antworten von euch freuen! :)

    Gibt es eine Funktion, mit der ich ein Konsolenprogramm mit einer beliebigen Taste beenden kann, ohne das "Drücken Sie eine beliebige Taste..." erscheint?

    Wie kann ich machen, dass das Programm automatisch beendet wird, wenn ich z.B. die Esc Taste drücke?

    Kann mir jemand zeigen, wie ich einzelne Texte in C++ farbig gestalten kann?

    Ich habe natürlich auch schon nach Lösungen gegoogelt, aber nichts gefunden, was wirklich brauchbar ist! :(

    Danke schon im Voraus für Antworten

    MfG Shivan
     
  2. daboom

    daboom Megabyte

    Das was Du meinst, wird eigentlich nur durch "System("pause");" erzeugt. Ein Konsolenprogramm (wie jedes andere auch) ist beendet, sobald die main Methode verlassen wird. Das hat mit dieser Meldung nichts zu tun.

    Nen Tastatur-Hook in die Windows Hook-Chain registrieren... ;)
    Nee, bring ma bitte nähere Infos, was Du genau machen möchtest und wie oder wo Du das laufende Programm beenden können möchtest.

    Meinst Du hiermit die Konsolenausgaben oder den Quellcode? :grübel:
     
  3. shivan

    shivan Byte

    Dieses Problem konnte ich mit..

    fflush(stdin);
    getchar();

    ... lösen.

    Ich habe schon öfters eine Funktion gesehen, mit der man das ganze Programm mit dem Drücken von Esc beendet konnte. Ich weiss nur das man dazu die Bibliothek "#define ESC 27" benutzen muss.
    Ich möchte die Ausgabe in meinem c++ Programm farbig darstellen. Dies konnte ich zwar für die ganze main Methode machen, leider aber nicht für einzelnen Text. Ich konnte dieses Problem zwar umgehen, doch es wäre trotzdem nützlich zu wissen, wie ich dies für einzelnen Text machen könnte.

    Am besten stell ich mal den Sourcecode rein :rolleyes: Das Programm ist aber leider noch nicht fertig. Wenn ihr Verbesserungsvorschläge habt, bei denen ich nicht alles umschreiben muss, oder wenn ihr Fehler gefunden habt, wär ich echt interessiert! :)

    Das Programm ist für eine Projektarbeit und für mich, um etwas zu lernen.

    Danke für deine Antwort daboom, ich dachte nicht, dass sich jemand mit meinem Problem befasst ;)
     

    Attached Files:

  4. shivan

    shivan Byte

    Einen Fehler im Programm hab ich noch und ich bin wirklich ratlos, wie ich dieses Problem lösen soll.

    Zeile 103: menuauswahl = getch();

    Hier hab ich festgelegt, dass ich Eingaben machen kann, ohne dabei Enter zu drücken. Leider wird bei einer gültigen, sowie bei einer ungültigen Eingabe eine Fehlermeldung ausgegeben.

    Wenn ich es auf cin umschreibe, also

    cin >> menuauswahl;

    funktioniert das Ganze fehlerfrei.
     
    Last edited: Jun 26, 2009
  5. daboom

    daboom Megabyte

    Ich persönlich nutze immer cout und cin für Aus- / Eingabe. Ist einfach komfortabler. cin liest offenbar aber erst etwas ein, wenn mindestens ein Zeichen (außer Leerzeichen etc.) eingetippt wurde. Außerdem muss jede Eingabe mit Enter beendet werden.

    "#define ESC 27" hat nix mit einer Bibliothek zu tun. Das ist lediglich ein Präprozessormakro, welche dem Symbol ESC den Wert 27 zuweist. Das hätte dann zur Folge, dass jedes Vorkommen von ESC im Quelltext durch die 27 ersetzt würde.
    Ein Programm an beliebigen Stellen beenden zu lassen (egal ob jetzt durch ESC oder irgendwas anderes), ist nicht so einfach. Dazu sollte man sich erstmal im Klaren sein, was die CPU bzw. der komplette PC denn so ungefähr bei jeder Anweisung, die man schreibt, tut.

    Eine einfache Art, wäre, an allen wichtigen Stellen eine if-Abfrage zu machen, ob die ESC Taste gedrückt wurde. Dazu müsste man aber nebenläufig zum Hauptprogramm den Tastendruck registrieren können usw. Das macht es gleich wieder komplizierter.

    Ich glaube nicht, dass man eine einfache Konsolenausgabe farblich gestalten kann. Mit Sicherheit kann ichs aber nicht sagen, dazu habe ich einfach zu wenig Erfahrung mit C++...
     
  6. shivan

    shivan Byte

    Okey vielen Dank! Ich werde das mit der Funktion getch(); einfach mal weglassen.

    Jetzt hab ich aber leider ein neues Problem, der Compiler gibt einen Fehler aus, ich kann diesen jedoch nicht nachvollziehen..

    #include <iostream>
    #include <math.h>
    using namespace std;

    int main()
    {
    system("cls");
    float zahl;
    cout << " Runden auf ganze Zahlen"<<endl;
    cout << "-------------------------"<<endl;
    cout << " Geben Sie die Zahl ein, die auf die naechste Ganzzahl gerundet werden soll: ";
    cin >> zahl;
    cout << endl;
    if(zahl >= 0)
    {
    cout << "Die eingegebe Zahl wurde von "<< zahl << "auf " floor(zahl + 0.5) << " gerundet.";
    }
    else
    {
    cout << "Die eingegebe Zahl wurde von "<< zahl << "auf " ceil(zahl - 0.5) << " gerundet.";
    }
    }


    Fehler:

    expected `;' before "floor"
    expected `;' before "ceil"

    Wo genau soll da der Fehler sein? Nach if bzw. else kommt kein ; und sonst macht das irgendwie auch niergends Sinn :grübel:
     
  7. daboom

    daboom Megabyte

    Dem Compiler fehlt ein Operator zwischen ""auf "" und "floor(zahl + 0.5)". Das gleiche nochmal bei ceil. Wenn Du dort ein "<<" einfügst, dürfte alles schön sein... ;)
     
  8. shivan

    shivan Byte

    Oh man was bin ich für ein Idiot! >.<
    Ich hab solange nachgeprüft wo der Fehler sein könnte und hab mich dabei nur auf Semicolons konzentriert. :)
     
  9. shivan

    shivan Byte

    Ich hab mir ein Programm geschrieben, um mit Divisionen zu rechnen, leider funktioniert es bei mir nicht wirklich richtig. Weiss jemand, was ich ändern könnte, damit es richtig funktioniert?

    Wär super, wenn mir jemand helfen könnte!

    C/C++ Code:

    {
    double loesung = 1;
    double divisor;
    double dividend;
    system("cls");
    int anzahl;
    cout << " Division"<<endl;
    cout << "----------"<<endl;
    cout << " Geben Sie zuerst den Dividend ein: ";
    cin >> dividend;
    cout <<endl;
    cout << " Wieviele Divisoren sollen erstellt werden? ";
    cin >> anzahl;
    cout <<endl;
    loesung = dividend / divisor;
    for (int i=0; i!=anzahl; ++i)
    {
    cout<<" "<< i+1 <<". Divisor eingeben: ";
    cin>>divisor;
    loesung = loesung / divisor;
    cout <<endl;
    }
    cout<<" Resultat: "<<loesung * 10<<endl;
    }

    Das Ganze sollte dann auf der Console etwa so aussehen:

    Division
    --------

    Geben Sie zuerst den Dividend ein: --> 100

    Wieviele Divisoren sollen erstellt werden? --> 2

    1. Divisor: 10
    2. Divisor: 2

    Resultat: 5


    Ich hoffe ihr könnt mir helfen, irgendwie klappt bei mir das Ganze nicht so, da ich zuerst den Dividenden angeben muss..

    Bin für jede Hilfe dankbar! :)

    MfG Shivan
     
  10. daboom

    daboom Megabyte

    Was genau soll denn da passieren?

    (((Dividend / Divisor1) / Divisor2) / Divisor3) ...

    oder wie jetzt?
     
  11. shivan

    shivan Byte

    Ja genau so
     
  12. daboom

    daboom Megabyte

    Na dann vor der for-Schleife einfach:

    PHP:
    loesung dividend;
    und innerhalb der for-Schleife:

    PHP:
    loesung /= divisor;
    Das sollte dann funktionieren.
     
  13. shivan

    shivan Byte

    Danke, werd ich gleich mal ausprobieren!
     
  14. shivan

    shivan Byte

    Jo funktioniert super, danke nochmals :rolleyes:
     
Thread Status:
Not open for further replies.

Share This Page