Dev C++



  • Hallo!

    Woran liegt es, dass folgendes Programm

    #include <iostream>
    using namespace std;

    int fakultaet(int n)
    {
    unsigned long z=1;
    for (int i = 1; i <= n; ++i)
    {
    z *= i;
    }
    return z;
    }

    main()
    {
    int n;
    cout << "Dieses Programm berechnet die Fakultaet einer Zahl, die Sie eingeben und mit \n[Enter] bestaetigen.\n";
    cin >> n;
    cout << n << "!=" << fakultaet(n) << "\n";
    }

    bestens funktioniert, wenn man es mit Visual-C++ kompiliert, es aber nach der Eingabe von n abbricht & sich beendet, wenn man es mit Bloodshed Dev-C++ kompiliert?
    Wenn ich <conio_mingw.h> includiere, und als letzte Zeile vor dem return ein

    while(!kbhit());

    setze, lässt sich n eingeben, aber ohne dass =F! angezeigt wird...

    Discordia



  • Hallo!!

    Dein Problem ist, dass das Programmfenster sich nach dem Ende des Programms automatisch schliesst. Weil das sehr schnell geht, bekommst Du die Lösung nicht zu Gesicht. kbhit klappt wahrscheinlich nicht, weil nach der Eingabe von n der Tastaturpuffer noch nicht ganz leer ist (das "Enter"-Zeichen ist noch drin...). mittels der Funktion sync() leerst Du den Puffer.
    mit cin.get() kannst Du ein Zeichen aus dem Puffer auslesen. So verhinderst Du das Schliessen des Ausgabefensters. Du kannst natürlich statt get() auch weiter kbhit verwenden. kbhit ist aber nicht im C++-Standard enthalten, so dass Du damit u.U. Probleme hast, wenn Du Dein Programm auf einem anderen Betriebssystem und/oder einem anderen Compiler übersetzen willst...
    So sieht die main-Funktion mit den Änderungen aus:

    main() 
    { 
    int n; 
    cout << "Dieses Programm berechnet die Fakultaet einer Zahl, die Sie eingeben und mit \n[Enter] bestaetigen.\n"; 
    cin >> n;
    cout << n << "!=" << fakultaet(n) << "\n";
    
    cin.sync(); // Tastaturpuffer leeren
    cin.clear(); // Fehlerflags löschen
    cin.get();  
    }
    

Anmelden zum Antworten