Fehler im Programm

flashbrain

Mitglied
Ich bin an der Uni-Karlsruhe und studier hier Chemieingenieurwesen. Dieses Semester müssen wir uns C++ reinziehen und ich scheiter schon am ersten Programm... Vielleicht könnt ihr mir ja weiterhelfen. Mein Programm sieht folgendermaßen aus:

#include <iostream>
using namespace std;
int main()
{
cout << "Gebe zwei Zahlen ein" ;
double a,b,c;
cin >> a >> b;
if (a>b) c=a;
else c=b;
cout << "Das Maximum liegt bei" << c << endl;
return 0;
}

Der Kompiler ( devcpp ) gibt keine Fehlermeldung aus und kompiliert brav... Nachdem das Programm aber gestartet wird und ich die zwei Zahlen einsetze schließt das Programm wieder. Ich blick echt nicht mehr durch Wär echt nett wenn ihr mir ein tipp habt... Bis dann
 
Dein Programm funktioniert. Du siehst nur nicht das Ergebnis weil die Konsole wieder zu schnell schliest. Entweder du startest das Programm in einer geoeffneten Konsole, dann schliesst sie anschliessend nicht, oder du fuegst eine weitere Keyboardabfrage hinzu, zB mit getc() dann schliesst die Konsole nicht wieder sofort.
 
Noch ne kleine Frage...

Wie kann ich in meinem Programm erreichen, dass es wieder mit der Abfrage : "geben sie zwei Zahlen ein" beginnt wenn es abgeschlossen hat?
 
moin


Code:
#include <iostream>
#include <conio.h>
#include <stdlib.h>

using namespace std;

int main()
{
    while(1)
    {
        cout << "Gebe zwei Zahlen ein" ;
        double a,b,c;
        cin >> a >> b;
    
        if (a>b) c=a;
            else c=b;
        cout << "Das Maximum liegt bei" << c << endl;
        cout<<"q zum beenden drücken, andere Taste für weiter";
        
        char taste = getch();
        if(taste == 'q')
            break;

        system("CLS");
    }

    return 0;
}


mfg
umbrasaxum
 
Hey Danke...

Danke für deine Hilfe!

Für was steht denn in dem Programm jetzt

#include <conio.h>
#include <stdlib.h>

kannst du mir vielleicht die Befehle die du benutzt hast erleutern ich check da irgenwie nicht durch... Das Programm läuft jetzt zwar 1a aber ich könnt das so nicht aufen anders Problem übertragen...
Danke nochmals an alle dir mir hier helfen mein Unwissen zu beseitigen (zumindest etwas...)
 
moin


conio.h und stdlib.h sind sowas wie iostream

Du brauchst sie für getch() und system().
getch() liest ein Zeichen ein und speichert es in der Variable taste.
Mit system kann man "Dos-Befehle" ausführen.

Liess am besten erstmal dein Buch weiter.


mfg
umbrasaxum
 
Die fuer dich neuen Dinge sind wohl auch
Code:
while(1) { /* code */ }
Das ist eine Endlosschleife. Der Wert von while ist immer 1==true. Unterbrochen wird diese Schleife erst mit break. Break springt aus einer Schleife hinaus, und du kannst es auch mit for-Schleifen etc. benutzen.

stdlib.h ist eine c-Standardbibliothek und enthaelt den system Befehl (Aufruf eines "System"-Befehls. Du kannst damit ein Programm ausführen.

conio.h ist eine Nichtstandard c-Bibliothek und bietet dir erweiterten Zugriff auf die DOS-Konsole (hier getch()).

Ich wuerde die Loesung auch ersteinmal nicht so machen, da hier
(a) c und c++ gemixt werden
und
(b) du das Problem auch mit Standardbilotheken leicht loesen kannst, was die Portabilitaet auf andere Systeme (Linux, Unix, etc.) erleichtert. Ist aber jetzt spaet und ich gib mein Beispiel spaeter ....
 
moin


Ich wuerde die Loesung auch ersteinmal nicht so machen, da hier
(a) c und c++ gemixt werden
Du hast ihm oben selber empfohlen getc() zu benutzen, wobei getc den Vorteil hat das er noch in der stdio.h mit drin ist, und man nciht die (nicht ganz unproblematische) conio.h mit einbinden muss.
Bin aber an deiner "reinen" C++ Lösung interessiert, da mit leider kein "C++-Befehl" bekannt ist der ein Zeichen einlesen kann, ohne das man noch Enter drücken muss.


mfg
umbrasaxum
 
umbrasaxum hat gesagt.:
Bin aber an deiner "reinen" C++ Lösung interessiert, da mit leider kein "C++-Befehl" bekannt ist der ein Zeichen einlesen kann, ohne das man noch Enter drücken muss.

Das stimmt. Ohne Return geht es im Standard nicht. Da die Standard c++ Bibliotheken keine ungebufferte Eingabestreams kennt, da diese zu Plattformabhaengig waeren. Also brauchst du noch ein letztes Return:

Code:
#include <iostream>

using namespace std;

int main(void)
{
    while(1)
    {
        cout << "Gebe zwei Zahlen ein" << endl ;
        double a,b,c;
	char taste;

        cin >> a >> b;
    
        if (a>b) c=a;
            else c=b;
        cout << "Das Maximum liegt bei " << c << endl;
	
        cin.get(); /* Es liegt noch ein Return=='\n' im Puffer, 
                           das laesst sich auch noch eleganter entfernen */
        cin.get(taste);
        if(taste == 'q')
            break;
    }

    return 0;
}

Generell sollte man auch nicht stdio.h sondern cstdio etc. verwenden.
 
Zurück