Kompiler

Hallo!

Woran liegt es, dass folgendes Programm

#include
using namespace std;

int fakultaet(int n)
{
unsigned long z=1;
for (int i = 1; i > n;
cout

Hallo Discordia,

Woran liegt es, dass folgendes Programm

#include
using namespace std;

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

bestens funktioniert, wenn man es mit Visual-C++ kompiliert,

Bei VC sind „int“ und „long“ normalerweise beide 32-Bit gross.

es aber nach der Eingabe von n abbricht & sich beendet, wenn
man es mit Bloodshed Dev-C++ kompiliert?

Ich vermute hier ist „long“ 32-Bit und „int“ 16-Bit gross.

Und was kann man tun,
damit auch letzteres funktioniert?

unsigned long fakultaet(int n)

MfG Peter(TOO)

int fakultaet(int n)
{
unsigned long z=1;
for (int i = 1; i return z;
}
bestens funktioniert, wenn man es mit Visual-C++ kompiliert,

Bei VC sind „int“ und „long“ normalerweise beide 32-Bit gross.

es aber nach der Eingabe von n abbricht & sich beendet, wenn
man es mit Bloodshed Dev-C++ kompiliert?

Ich vermute hier ist „long“ 32-Bit und „int“ 16-Bit gross.

Und was kann man tun,
damit auch letzteres funktioniert?

unsigned long fakultaet(int n)

Aber selbst wenn der Bloodshed Compiler unterschiedliche Größen für int und long verwendet, ist das kein Grund zum undefinierten Abbruch der Applikation. Der long muß implizit vom compiler umgewandelt werden. Möglicherweise gehen dabei Bits verloren, so daß das Ergebnis nicht stimmt, ein Abbruch ist aber nicht standardkonform!

Um den Fehler einzugrenzen würde ich den Warning-Level hochsetzen und Optimierungen abschalten.

Gruß Markus

Hi,

das ligt am Dev-Cpp. ER beendet die Konsole sofort nachdem das Programm beendet wurde. Der VisualC++ macht das nicht. Beim Bloodshed Version 4.x mußt du die includieren, und als letzte Zeile vor dem return ein

while(!kbhit());

setzen, und ab version 5.xx langt ein statt

grüße, Micha

Danke, aber jetzt lässt sich eben n eingeben, ohne dass =F! angezeigt wird…

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

dann tausch das „\n“ beim ‚cout‘ mal gegen ‚endl‘ aus. Das beirkt, das der komplette Puffer geschrieben wird. Sonst wird die Ausgabe zurückgehalten, und da kbhit() nicht C++ ist, sondern irgendwas (wie alles aus der conio) wird es auch nicht synconisiert. Im Prinzip wartet das Programm auf die Engabe einer Taste, und erst wenn es beendet wird, schreibt es den Puffer auf den Bildschirm. Deine Ausgabe eben.

grüße, Micha

Das hilft leider auch nichts…

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo!

Woran liegt es, dass folgendes Programm

–snipped–

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? Und was kann man tun,
damit auch letzteres funktioniert?

Hallo! Hab mal jahren mit Dev-C++/gcc/Win98 gearbeitet und kann mich noch dunkel erinnern dass man da doch was mit systhem(pause) in die main packen musste… Kennt vielleicht wer den genauen Code?
Soweit ich mich erinnern kann, gabs bei dem Editor beim Starten gleich so nen Beispielprogramm, wo der Code drinsteht… Kannst ja mal nachsehen?
Kann aber auch sein, dass ich total danebenlieg…

HTH,
Bettina