Hello World Problem
-
Hey Leute
ich hab schreib gerade das einfache Hello World Programm mit dem Visual Studio 2005.
Ich erstelle eine Konsolenanwendung.und jedesmal wenn ich das Programm ausführen will, öffnet sich für einen Bruchteil einer Sekunde die Konsole.dann geht si auch gleich wieder zu.
Hier mal mein Quelltext:#include <stdio.h>
int main()
{
cout <<"Hallo Welt";
system("PAUSE");
return 0;
}Was kann ich denn tun???
-
// #include <stdio.h> // Sonnst noch wünsche? #include <iostream> int main(void) { std::cout << "Hallo Welt" << std::endl; std::cout << "Druecken Sie eine beliebige Taste um das Programm zu beenden!" << std::endl; std::cin.get() return 0; }
-
Tja das sieht wohl so aus als ob es nicht funktioniert

Das Phänomen mit dem kurz aufgehenden Konsolenfenster ist immer noch da.
-
-
Scooby2007 schrieb:
Tja das sieht wohl so aus als ob es nicht funktioniert

Das Phänomen mit dem kurz aufgehenden Konsolenfenster ist immer noch da.Da muss was anderes schieflaufen, der Code läuft so mit der gewünschten Funktionalität. Unter Visual Studio 2003.net sieht die main allerdings ein wenig anders aus:
#include "stdafx.h" #include <iostream> int _tmain(int argc, _TCHAR* argv[]) { std::cout << "Hallo Welt" << std::endl; std::cout << "Druecken Sie eine beliebige Taste um das Programm zu beenden!" << std::endl; std::cin.get(); return 0; }
-
das main mit argc und argv ist nur wenn man argumente annehmen moechte - sofern diese nicht geruecksichtigt werden ist ein main() durchaus legitim
dein _tmain sagt mir das du in unicode compiliertst, er moechte aber in multibyte {zu sehen an den "" statt _T("")}
und er benutzt keinen precompiled header - also faellt das #include "stdafx.h" auch wegich kann in den beispielcode von (D)Evil keinen fehler erkennen, allerdings hab ich schon mnchmal erlebt das wenn man ENTER benutzte zwei mal cin.get() machen musste da einmal \n und dann noch \r gesendet wurde
#include <iostream> int main() { std::cout << "Hallo Welt" << std::endl; std::cout << "Druecken Sie eine beliebige Taste um das Programm zu beenden!" << std::endl; std::cin.get() std::cin.get() return 0; }so duerfte es gehen
-
@Mr Evil:
Ist doch egal ob ein oder zwei oder 100 cin.get(). Das erste .get() sollte auf jeden Fall solange blockieren solange garkeine Taste gedrückt wurde.
-
@Hustbaer
Ja, nicht unbedingt...Wenn da noch ein Enter im Speicher liegt tut cin.get(); nicht!
Probier mal hinter das cin.get(); noch cin.sync(); anzuhängen das funzt bei mir immer!@Scooby
Des weiteren kannst Du unter Deinem Header nochusing namespace std;anfügen. Bei kleinen Programmen ist das immer gut, dann kannst Du dir nämlich das
std:: ***sparen.
Viel Spass noch
-
dittus.uwe schrieb:
@Hustbaer
Ja, nicht unbedingt...Wenn da noch ein Enter im Speicher liegt tut cin.get(); nicht!
Probier mal hinter das cin.get(); noch cin.sync(); anzuhängen das funzt bei mir immer!Wo soll denn in diesem Fall das Enter das noch "im Speicher liegt" herkommen?
Ne, ehrlich, ich habs ausprobiert, und es passiert nicht. Nicht wenn ich nach dem Starten des Programmes keine Tastatureingaben mache.Wenn man natürlich den Input Stream vorher "flushen" ("entleeren") will dann sollte man vorher sync aufrufen, ja.
BTW: was anderes als \n hab ich nie bekommen, weiss nicht wie du das zusammengebracht hast.
-
hustbaer schrieb:
dittus.uwe schrieb:
@Hustbaer
Ja, nicht unbedingt...Wenn da noch ein Enter im Speicher liegt tut cin.get(); nicht!
Probier mal hinter das cin.get(); noch cin.sync(); anzuhängen das funzt bei mir immer!Wo soll denn in diesem Fall das Enter das noch "im Speicher liegt" herkommen?
cin puffert die Benutzereingaben zeilenorientiert, deshalb mußt du jede Eingabe mit einem ENTER abschließen, bevor dein Programm etwas davon bemerkt. Wenn du aber vorherige Eingaben per operator>> geholt hast, bleibt das letzte '\n' als Whitespace im Speicher stehen (und dieses wird dann vom ersten cin.get() abgeholt). Eine Primitiv-Lösung ist die Variante, zwei get() zu nutzen, aber auf der sicheren Seite bist du mit ignore() oder sync().
-
ich denk mir das hat "auch" was mit multibyte und unicode zu tun, soweit ich weiss wird bei unicode immer "\n\r" gesendet und bei multibyte "\n" wenn man enter drueckt, so koennen dann auch zwei zeichen im speicher stehen nach enter
kann mich dabei aber auch irren, aber ich seh das meistens wenn ich was abgespeichert hab