PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Programm schließt sich seltsam



Brotmesser
18.08.2008, 22:06
Hiho,

ich versuche (inspiriert von den ganzen toolz die hier selbstgecodet werden) seit letzter Woche C++ zu lernen. Jetzt war ich bei dem Kapitel eingaben angekommen. Und habe mal versucht so ein kleines Fahrenheit -> Celcius Programm zu schreiben. Doch seltsamerweise schließt sich das sofort nach der Eingabe. Damit ihr mir vielleicht Helfen könnt, hab ich hier den Code:


//erstes Programm mit eingabe :)

#include <iostream>
using namespace std;

int main()
{
double fahrenheit;
double celsius;

cout << "Geben sie die Temperatur in Fahrenheit ein: ";
cin >> fahrenheit;

fahrenheit = 20; // Mit oder ohne variable gleiches Problem
celsius = (fahrenheit - 32) + 5.0 / 9.0;

cout << fahrenheit
<< "Grad Fahrenheit entsprechen " << celsius
<< " Grad Celsius" << endl;

cin.get();
return 0;
}


Im Compiler wird das Programm übrigens so wie es sollte ausgeführt.
Hoffen auf leichte Fehlerlösung.

mfg

Whit3z
18.08.2008, 22:15
nimm doch einfach vor return


system("PAUSE");

Brotmesser
18.08.2008, 22:17
Danke, hat funktioniert, ich kannte den Befehl noch nicht :)

Wunderbar, jetzt kann ich weiterarbeiten, danke nochmal :)

mfg

Whit3z
18.08.2008, 22:18
np :wink:

dann kannste übrigens das


cin.get();

weglassen

Brotmesser
19.08.2008, 15:40
Mhm, jetzt habe ich in meiner Euphorie ganz vergessen zu fragen wieso "cin.get()" nicht funktioniert. Und vorallem, wann "cin.get" und wann "system("PAUSE")" besser ist.

mfg

Raxtor
19.08.2008, 18:07
Da die Eingabe gepuffert ist werden, meistens, die Daten aus dem Puffer als Eingabe gewertet => deswegen funktioniert "cin.get()" alleine nicht.

Damit es aber funktioniert kannst du vorher alle Fehlbits löschen die die Eingabe verhindern könnten und anschließend so viele Zeichen wie im Puffer sind ignorieren(am besten machst du daraus gleich eine eigene Funktion):


cin.clear(); // Löschen
cin.ignore(std::cin.rdbuf()->in_avail()); // Ignorieren
cin.get(); // Eingabe abwarten

System("PAUSE") verbraucht u.U. viel Systemleistung, und hat auch noch andere Nachteile => bleib bei der Funktion.

RoQx
19.08.2008, 19:17
starte das programm einfach im cmd um die lösung zu sehen bevor sich das programm wieder schließt

Brotmesser
19.08.2008, 19:22
@ Raxtor

alles klar, dann werde ich mir die Befehle mal aufschreiben und angewöhnen. Danke nochmal :)

roqx...
also... im Grunde wurde die Frage schon beim 2. Post beantwortet und ähm... ich hatte schon wieder ne andere Frage... aber trotzdem... danke (>.<)

mfg

Raxtor
19.08.2008, 19:39
@roqx2: Ich glaube das wär(jetzt mal rein theoretisch er würde es verkaufen) etwas zu kompliziert für den Benutzer. Bzw wär es generell einfach zu umständlich man könnte doch gleich auf die .exe klicken :D

@Brotmesser: np

RoQx
19.08.2008, 22:58
@roqx2: Ich glaube das wär(jetzt mal rein theoretisch er würde es verkaufen) etwas zu kompliziert für den Benutzer. Bzw wär es generell einfach zu umständlich man könnte doch gleich auf die .exe klicken :D

@Brotmesser: np

solch ein programm it statischen values verkauft man doch nicht :roll:

wieso wäre es umständlich... es ist eine konsolenanwendung.. die wird nunmal im cmd benutzt x)

Raxtor
19.08.2008, 23:05
Deswegen sagte ich ja rein theoretisch(=> mal angenommen) ich weiß dass man sowas nicht verkauft^^

Ja aber du müsstest jedesmal die CMD öffnen und die .exe laden.. mit der Zeit nervt es schon, mich zumindest.
einfacher ist es einfach die .exe anzuklicken ;)

RoQx
19.08.2008, 23:25
naja man kann ja mit cd das folder festlegen und mit den pfeiltasten immer wiederholen x)

Whit3z
19.08.2008, 23:29
letztendlich ist es aber Anwenderfreundlicher, wenn man die Funktion von Raxtor einbaut, bzw.
System("PAUSE"); benutzt!

onkel2000
21.08.2008, 16:58
ich benutze immer getch() aus der conio.h, dieser header steht aber nicht überall zur verfügung

Raxtor
21.08.2008, 20:04
Das wäre auch eine Alternative, vorher aber sicherheitshalber "fflush(stdin)" anwenden da sonst das gleiche Prob. auftreten könnte... so zumindest meine Erfahrung

hersch24
21.08.2008, 20:34
warum setzt du fahrenheit mit 20 gleich ? obwohl du cin benutzt ?

Brotmesser
21.08.2008, 21:24
warum setzt du fahrenheit mit 20 gleich ? obwohl du cin benutzt ?

Jo, das war ein logik fehler. Ich habe einfach nicht genug mitgedacht als ich im Buch weitergelesen habe. Es sollte nämlich der bereits gecodete Quelltext genommen werden, und da dann halt die cin funktion.
Habe es dann nachher noch mal entfernt.

mfg