Anfänger Problem

02/03/2012 14:50 _Roman_#1
Hallo liebe Community,

unzwar habe ich heute das Buch C++ Lernen und Professionell anwenden bekommen. Abgesehen davon, dass mein Laptop die dabeiliegende CD nicht liest, hab ich mir einfach MC Visual C++ 2010 Express runtergeladen. Nun habe ich mit einem einfachen Programm gestartet. Einfach ein leeres Projekt erstellt und dazu natürlich eine Quelldatei. Dann gab ich folgendes ein.

#include <iostream>
using namespace std;

int main()
{
cout << "Hallo" << endl;
return 0;
}

Ganz einfach... Aber das Problem ist, dass es nicht so ganz funktioniert. Unzwar schließt sich das Programm direkt nach dem Debuggen wieder.
Noch eine Frage nebenbei.
Warum haben soviele was gegen:
using namespace std; ?
Das vereinfacht alles doch.. Dann muss man doch nicht immer ::std schreiben
02/03/2012 14:58 Cascraft#2
Du hast warscheinlich nicht aufgepasst...
bei
Quote:
return 0;
schließt sich das Programm sofort, um das zu verhindern werde ich anstatt return 0; einen getchar(); schreiben, damit das Programm sich nicht sofort schließt.

Quote:
using namespace std;
benutze ich und habe nichts dagegen :-)
02/03/2012 14:58 jacky919#3
Versuchs mal hiermit:
Code:
int main()
{
cout << "Hallo" << endl;
cin.get();
return 0;
}
Das Programm sollte nun solange warten bis du die Enter-Taste drückst.

Quote:
Dann muss man doch nicht immer ::std schreiben
std::xy nicht xy::std
02/03/2012 15:08 _Roman_#4
Danke erstmal an beide und sry für den Schreibfehler :DD Hatte keine Lust zu editieren. Habs mal probiert und siehe da, es klappt.
Sry Cascraft, deine Methode hat bei mir leider nicht geklappt, hab eigentlich schon alles mögliche probiert, aber naja... auch egal.
Danke nochmal, wenn ich Fragen hab, werde ich hier posten.
02/03/2012 15:20 jacky919#5
Code:
#include <iostream>
#include <stdio.h>

using namespace std;

int main()
{
	cout << "Hello World!" << endl;

	getchar();

	return 0;
}
Würde wieder warten bis Enter gedrückt wird, hätte also denselben Effekt. Bei getchar() handelt es sich aber um eine C Funktion, weshalb die Inkludierung der Headerdatei stdio.h von Nöten ist.
02/03/2012 18:07 .SkyneT.#6
Noch etwas, der Vollständigkeit halber, getchar() / cin.get() wartet nicht nur auf
die Enter Taste, sondern auch auf alle anderen.
02/03/2012 19:12 Nightblizard#7
Quote:
Warum haben soviele was gegen:
using namespace std; ?
Im globalen namespace ist das imho ein no-go!
Ich persönlich mag es nicht, da es dir den globalen namespace regelrecht zumüllt, wenn du ersteinmal mit der ganzen STL arbeitest. "stack", "vector", "map", u.v.m., alles Namen, die du nicht mehr nutzen kannst.
Im worst case kann es dazu kommen, dass der Compiler bestimmte Symbole nicht auflösen kann und somit das Programm nicht erstellt wird.
So Tippe ich lieber 5 Zeichen mehr auf der Tastatur, was bei mir keine halbe Sekunde dauert, als dass ich am Ende auch nur eine unnötige Minute Fehler behebe, die von vorne herein unnötig waren.

Ratsamer ist es, die einzelnen Klassen, die du nutzen möchtest, in den entsprechenden Funktionen über "using <Namespace>::<Klassenname>;" zu nutzen.
Bzw. bin ich inzwischen soweit, dass ich mir ein Makro geschrieben habe, um das Verhalten von scoped namespaces aus C# zu erhalten, was den Quellcode (imho) nochmal ein gutes Stück leserlicher gestaltet. Aber so weit musst du nicht gehen! :)

Nochmal zur Verdeutlichung:
[Only registered and activated users can see links. Click Here To Register...]




Quote:
getchar();
Wer mit C++ arbeitet, der sollte auch keine (bzw. so wenig wie möglich; bzw. nur in bestimmten Szenarien) C-Funktionen nutzen. Die STL wurde ja nicht zum Spaß eingeführt! ;)
std::cin.get(); hat die gleiche Funktionalität wie getchar. Gibt man mehr als nur ein Return ein, muss man den Eingabestream flushen, da dir sonst das nächste std::cin.get() scheinbar einfach übersprungen wird.
Ich persönlich favorisiere hier den string Header ebenfalls zu inkludieren und dann über std::getline wirklich eine Zeile einzulesen.
Code:
std::getline(std::cin, std::string()); //ließt sauber eine Zeile ein!
Könnte man zwar als unsauberen workarround bezeichnen (mimimi, ungenutzter Speicher wird reserviert), aber es erfüllt seinen Zweck hervorragend!


So far,
Night
02/03/2012 23:06 xNopex#8
Quote:
weshalb die Inkludierung der Headerdatei stdio.h von Nöten ist.
Ne cstdio....
02/03/2012 23:32 jacky919#9
Quote:
Originally Posted by xNopex View Post
Ne cstdio....
Hmmm... [Only registered and activated users can see links. Click Here To Register...]
02/04/2012 00:47 MoepMeep#10
Quote:
Originally Posted by jacky919 View Post
Hmmm... [Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]
02/04/2012 00:51 jacky919#11
Was war dann falsch an meiner Formulierung?
Die Headerdatei heißt doch "stdio.h"
02/04/2012 01:14 MoepMeep#12
Quote:
Input and Output operations can also be performed in C++ using the C Standard Input and Output Library (cstdio, known as stdio.h in the C language)
.
02/09/2012 23:40 Seelenmeister#13
Also erstmal gewöhn dir an eine main Funktion wird Standardtechnisch immer als void geschrieben. Das mit dem sofortigen beenden ist nur so ein ding mit dem 2010er ..... !
Naja also oke schauen wir mal was wir tun können. Wichtig ist es wenn du das Programm startest das du bein einrichten ein komplett leeres Dokument wählst ! Dannach legst du eine main datei an da du für solche einfachen programme keine Funktionen oder sonstwas in header auslagern musst !

Das sollte da so aussehen !

#include<iostream>
using namespace std;

void main(){

cout<<"Hallo"<<endl;
system("PASUE"); // Das der Debugger nich gleich wieder zumacht !
}

Edit : Wenn du lust hast Grundtechnisch ein bisschen was zu lernen kannste dich gerne melden :)
02/10/2012 03:28 MoepMeep#14
Quote:
Originally Posted by Seelenmeister View Post
Also erstmal gewöhn dir an eine main Funktion wird Standardtechnisch immer als void geschrieben. Das mit dem sofortigen beenden ist nur so ein ding mit dem 2010er ..... !
Naja also oke schauen wir mal was wir tun können. Wichtig ist es wenn du das Programm startest das du bein einrichten ein komplett leeres Dokument wählst ! Dannach legst du eine main datei an da du für solche einfachen programme keine Funktionen oder sonstwas in header auslagern musst !

Das sollte da so aussehen !

#include<iostream>
using namespace std;

void main(){

cout<<"Hallo"<<endl;
system("PASUE"); // Das der Debugger nich gleich wieder zumacht !
}

Edit : Wenn du lust hast Grundtechnisch ein bisschen was zu lernen kannste dich gerne melden :)
Diese Person ist nicht ernstzunehmen, einfach ignorieren!
02/10/2012 03:51 Rainvair#15
Quote:
system("PASUE"); // Das der Debugger nich gleich wieder zumacht !
Edit : Wenn du lust hast Grundtechnisch ein bisschen was zu lernen kannste dich gerne melden
Quote:
system("PASUE"); // Das der Debugger nich gleich wieder zumacht !
Du solltest "grundtechnisch" etwas lernen.