Volumenberechnung, Konsole/DOS Fenster schließt sich nach eingabe



  • habe folgendes Problem - nach eingabe der ersten Parameter (Durchmesser, Höhe) shcließt sich die Konsole, jedoch sollen die Ergebnisse ausgegeben werden. weiß nicht mehr weiter 😕
    Hier mal mein Code

    /* Uebungsblatt 1: Aufgabe 1
       Dieses Programm berechnet das Volumen eines Zylinders und die Anzahl
       notwendiger Behaelter genuegend fuer 1000 Kubikmeter Wasser */
    
    #include<iostream>
    
    using namespace std;
    
    int main() {
    	const float PI = 3.1415927;
    	float radius, einzelVolumen, zylinderHoehe, wasserMenge = 1000.0;
    	float anzahl;
    
    	// Einlesen von Radius und Hoehe
    	cout << "Geben Sie den Radius eines Zylinders [Meter] ein: ";
    	cin >> radius;
    	cout << "Geben Sie die Hoehen eines Zylinders [Meter] ein: ";
    	cin >> zylinderHoehe;
    
    	// Definieren Sie HIER Ihre Berechnung
    	// (die zweite Potenz soll mit hilfe der ‘pow’ Funktion ausgerechnet werden)
    	// V = PI*(R^2)*H
    	einzelVolumen = PI*pow(radius, 2)*zylinderHoehe;
    	anzahl = wasserMenge / einzelVolumen;
    
    	// Ausgabe des Ergebnisses auf dem Bildschirm
    	cout << "Volumen eines Zylinders= " << einzelVolumen << " Kubikmeter." << endl;
    	cout << "Fuer " << wasserMenge << " Kubikmeter wasser braucht man" << endl;
    	cout << ceil(anzahl) << " Zylinder" << endl;									 //Hier ceil(anzahl) um die Anzahl zu runden
    
    	cin.get();
    
    	return 0;
    }
    

    danke mal im vorsau für die hilfe 😃 👍



  • Kai015 schrieb:

    habe folgendes Problem - nach eingabe der ersten Parameter (Durchmesser, Höhe) shcließt sich die Konsole, jedoch sollen die Ergebnisse ausgegeben werden. weiß nicht mehr weiter 😕

    Konsolenprogramme sind dafür da, aus der Konsole ausgeführt zu werden. Ansonsten siehe FAQ.



  • ok danke, hab den fehler mitlwerweile gefunden 🙂 -hab das cin.get(); durch system("pause") ersetzt



  • ...und damit einen neuen fehler produziert, nämlich system() verwendet 😉



  • Falsches Unterforum.



  • Mach einfach

    int main() { 
        const float PI = 3.1415927; 
        float radius, einzelVolumen, zylinderHoehe, wasserMenge = 1000.0; 
        float anzahl; 
    
        // Einlesen von Radius und Hoehe 
        cout << "Geben Sie den Radius eines Zylinders [Meter] ein: "; 
        cin >> radius; 
        cout << "Geben Sie die Hoehen eines Zylinders [Meter] ein: "; 
        cin >> zylinderHoehe; 
    
        // Definieren Sie HIER Ihre Berechnung 
        // (die zweite Potenz soll mit hilfe der ‘pow’ Funktion ausgerechnet werden) 
        // V = PI*(R^2)*H 
        einzelVolumen = PI* pow(radius, 2)*zylinderHoehe; 
        anzahl = wasserMenge / einzelVolumen; 
    
        // Ausgabe des Ergebnisses auf dem Bildschirm 
        cout << "Volumen eines Zylinders= " << einzelVolumen << " Kubikmeter." << endl; 
        cout << "Fuer " << wasserMenge << " Kubikmeter wasser braucht man" << endl; 
        cout << ceil(anzahl) << " Zylinder" << endl;                                     //Hier ceil(anzahl) um die Anzahl zu runden 
        int p;
        cin>>p; 
    
        return 0; 
    }
    

    dann brauchst du nicht mit dem system rumfummeln..



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++/CLI mit .NET in das Forum C++ (alle ISO-Standards) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Ich benutze immer

    std::cin.sync();
    std::cin.get();
    

    Da ich dies aber noch nicht woanders gesehen habe, wollte ich fragen, ob diese Konstruktion einen Fehler hat?


  • Mod

    Ein standardkonformes Verhalten von sync auf Eingabestreams ist es, nichts zu tun.



  • Könntest Du das näher erläutern?

    Hier ( http://www.cplusplus.com/forum/beginner/45543/ ) wird geschrieben, das Reste im Eingabe-Stream ignoriert werden. std::cin.get() kann dann also nicht wirkungslos "verpuffen"?


  • Mod

    lemon03 schrieb:

    Könntest Du das näher erläutern?

    Eine genaue Erklärung geht tief in die interne Architektur der Streams rein. Ich glaube, das lasse ich besser mal. Daher lieber mal eine etwas oberflächlichere Erklärung:
    Deine C++-Programmumgebung ist wie ein schwarzer Kasten, da geht ein Papierband rein, auf dem stehen Zeichen. Dieses Papierband heißt stdin. Wo die Zeichen herkommen, wie sie auf das Band kamen, wann sie auf das Band kamen, und so weiter, das alles kann das Programm im schwarzen Kasten nicht wissen. Das cin ist ein Objekt in deinem Programm, das lebt auch in dem schwarzen Kasten. Das kann auch nur gucken, welche Zeichen auf dem Papierband stehen. Das cin-Objekt darf einen internen Puffer benutzen, das heißt, es darf ein bisschen im Voraus gucken, was auf dem Band geschrieben steht. cin.sync() weist das Objekt an, alles, was es im Voraus gelesen hat, zu verwerfen.

    Aber weder steht fest, ob cin überhaupt intern einen Puffer benutzt oder wie weit es diesen im Voraus füllt. Du hast vermutlich bisher nur unter Windows getestet, da ist (wenn ich mich recht entsinne) bei der gängigsten Implementierung das cin-Objekt recht gierig und liest so weit es nur irgendwie kann. Aber bei anderen Implementierungen muss dies nicht so sein. Und es wird nicht so sein. Die MSVC-Umgebung ist meines Wissens nach die einzige, die das so macht.

    Hier ( http://www.cplusplus.com/forum/beginner/45543/ ) wird geschrieben, das Reste im Eingabe-Stream ignoriert werden. std::cin.get() kann dann also nicht wirkungslos "verpuffen"?

    Dann musst du eben entscheiden, welche deiner Internetforenquellen vertrauenswürdiger ist. Ich zeige dir aber mal das Beispiel aus dem verlinkten Thread unter einer Unix-Umgebung ausgeführt:
    http://ideone.com/Gqe2AV
    Laut dem anderen Thread hätte da ja als Ausgabe "Hello,, 1, 2" kommen sollen...

    Die Referenz zu istream::sync auf der Seite ist jedoch korrekt und erklärt das Problem:
    http://www.cplusplus.com/reference/istream/istream/sync/

    Notice that the called function may succeed when no action is performed, if that is the behavior defined for the stream buffer object on synchronization.


Log in to reply