Anfänger Problem

02/10/2012 07:41 käsekuchen11elf#16
Quote:
Originally Posted by Seelenmeister View Post
Das sollte da so aussehen !

#include<iostream>
using namespace std;

void main(){

cout<<"Hallo"<<endl;
system("PASUE"); // Das der Debugger nich gleich wieder zumacht !
}
Das ist auf so viele Arten böse...

1.) dass die main funktion standardtechnisch als void deklariert werden muss ist natürlich quatsch, richtig ist für c++ die "int main" vairante, das programm muss ja dem betriebssystem einen rückgabewert liefern.
nachlesbar in der C standard definition: [Only registered and activated users can see links. Click Here To Register...] punkte 164, 165
2.) using namespace std ist zwar für kleine projekte ok, kann aber bei größeren projekten kollisionen im namespace erzeugen. lieber gar nicht erst angewöhnen.
3.) system() calls sollte man so weit wie möglich vermeiden, wenn man einigermaßen portabel programmieren will. von den mannigfaltigen anderen problemen mit system() fang ich gar nicht erst an. ergo: auch nicht angewöhnen :)

Das ist leider das Problem mit vielen vielen anfänger tutorials und büchern in c++. die meisten taugen einfach nichts, weil viele sachen einfach schlichtweg falsch sind.

hier mal eine aufgebesserte variante:

Code:
#include <iostream>

int main()
{
  std::cout << "hello world" << std::endl;
  return 0;
}
Dass der debugger von Visual Studio sofort wieder zugeht ist klar, das Programm wird ja auch beendet, wieso sollte der debugger aufbleiben :D
mögliche lösungen:

1.) die getchar() variante, die genannt wurde
2.) system("pause") (ist aber, wie gesagt, böse)
3.) bei return 0 einen breakpoint setzen ( <- das würde ich dir empfehlen)
4.) visual studio nur zum bauen verwenden, und das entstandene programm auf der kommandozeile starten. dann bleibt dir die ausgabe auch erhalten. (dafür geht aber der debugger verloren, d.h. für größere projekte weniger gut geeignet)

Soviel dazu. bei weiteren fragen gerne anklopfen :)
02/10/2012 16:09 MrSm!th#17
Der C++ Stil von getchar wäre btw. cin.get().
02/10/2012 22:35 Tyrar#18
Quote:
Originally Posted by MrSm!th View Post
Der C++ Stil von getchar wäre btw. cin.get().
müsste das nicht std::cin.get() sein? :D
02/10/2012 23:07 Nightblizard#19
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 :)
Ich hoffe du versuchst nur zu trollen (und bekommst eine Verwarnung für den Versuch), denn du hast in 6 Zeilen 6 Fehler (bzw. unschöne Dinge) gemacht - alle Achtung!


Quote:
using namespace std;
Hier wird in mehreren Beiträgen davon abgeraten usings in den globalen scope zu schreiben.

Quote:
void main(){
Hier sinds gleich 2 Dinge zu bemängeln.
1. main ist niemals void! Siehe: [Only registered and activated users can see links. Click Here To Register...]
2. { gehört in eine eigene Zeile! (let the flame war begin)

Quote:
cout<<"Hallo"<<endl;
Hier sinds ebenfalls 2 Dinge, jedoch wurde eins schon genannt.
1. globales benutzen eines namespaces
2. Spacing, y u no have one?!

Quote:
system("PASUE"); // Das der Debugger nich gleich wieder zumacht !
1. [Only registered and activated users can see links. Click Here To Register...]
2. Das macht nicht der Debugger zu, sondern dein Betriebssystem. Das Programm ist beendet; kein Grund die Konsole länger offen zu halten.




:rolleyes:
02/10/2012 23:52 Dr. Coxxy#20
Quote:
system("PASUE");
wird gar nix machen.

(fehler nr 7...)
02/11/2012 00:21 MoepMeep#21
Quote:
Originally Posted by Nightblizard View Post
2. { gehört in eine eigene Zeile! (let the flame war begin)
Das nicht unbedingt, aber zwischen ) und { gehört auf jedenfall ein leerzeichen.
02/11/2012 12:16 L0wByte#22
Probiers mal so ;)

PHP Code:
#include <iostream>
using namespace std;

int main()
{
cout << "Hallo" << endl;
cin.get();
return 
0;


Müsste gehen(geht auf jeden fall bei mir :)).
02/11/2012 14:13 MrSm!th#23
Quote:
2. { gehört in eine eigene Zeile! (let the flame war begin)
Leider verpesten die ganzen Oldschool-C-Coder mit ihrem K&R-Style die Programmierwelt, weshalb dieser Stil noch als legitim gilt ;<

Quote:
Originally Posted by Nightblizard View Post
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...]
Würdest du den Code des Makros vielleicht hier posten? :>
02/11/2012 16:10 Nightblizard#24
Quote:
Originally Posted by MrSm!th View Post
Leider verpesten die ganzen Oldschool-C-Coder mit ihrem K&R-Style die Programmierwelt, weshalb dieser Stil noch als legitim gilt ;<


Würdest du den Code des Makros vielleicht hier posten? :>
Klar, warum nicht?

Ist ziemlich straightforward.
Code:
#define _using(_namespace) { using _namespace;
#define _endusing }
Ohne Makro sähe das also so aus:
Code:
void foo()
{
	//_using(std::cin)
	{
		using std::cin;
		//Hier steht der Code zwischen _using(_namespace) und _endusing
	}
	//_endusing
}
Schöner wäre es, wenn man noch hinzufügt, dass das Folgende möglich wäre:
_using(std::string, std::cout, std::cin)

Aber dazu wollte ich mich nicht weiter in Makros einarbeiten; versuche die in der Regel zu vermeiden. <-- Falls das jemand gemacht hat PN an mich bitte! :P
02/11/2012 16:31 jacky919#25
Quote:
Originally Posted by Nightblizard View Post
Schöner wäre es, wenn man noch hinzufügt, dass das Folgende möglich wäre:
_using(std::string, std::cout, std::cin)
Das Problem wird wohl sein, dass sich Makros nicht überladen lassen.
02/11/2012 16:34 xNopex#26
Quote:
Leider verpesten die ganzen Oldschool-C-Coder mit ihrem K&R-Style die Programmierwelt, weshalb dieser Stil noch als legitim gilt ;<
In Java ist das 'ne Coding Convention für die dir bei Aufgaben massig Punkte abgezogen werden, wenn du die scheiß Klammer in eine eigene Zeile setzt... Ich musste das leidvoll lernen.. :( Also vllt. ist der Urheber des Codes auch ein Javanianer.
02/11/2012 17:07 käsekuchen11elf#27
Quote:
Originally Posted by xNopex View Post
In Java ist das 'ne Coding Convention für die dir bei Aufgaben massig Punkte abgezogen werden, wenn du die scheiß Klammer in eine eigene Zeile setzt... Ich musste das leidvoll lernen.. :( Also vllt. ist der Urheber des Codes auch ein Javanianer.
man darf man doch in java die klammern setzen wo man lustig ist, nichtoder?
02/11/2012 17:20 Nightblizard#28
Quote:
Originally Posted by jacky919 View Post
Das Problem wird wohl sein, dass sich Makros nicht überladen lassen.
Wenn es eine Präprozessordirektive wie "split" gäbe, dann wäre das auch ohne Überladungen machbar. Aber damit habe ich mich nie richtig auseinander gesetzt, desshalb kann ich dazu nicht viel sagen. Vielleicht ist es ja wirklich nicht machbar, aber cool wäre es. :)
02/11/2012 17:27 xNopex#29
Quote:
man darf man doch in java die klammern setzen wo man lustig ist, nichtoder?
Nö. Denn dazu sind die Coding Conventions ja da. Ein einheitlicher Programmierstil, dass sich jeder Java Programmierer leicht in fremden Sourcecodes zurechtfinden kann. Auch wenn ich die Umsetzung teilweise schlecht finde, ist die Idee gut.

EDIT: Also du hast im prinzip Recht. Der Compiler wird nicht meckern. Aber in der Praxis hält man sich an die Conventions. In Eclipse gibts ne eingebaute Funktion um den Source automatisch korrigieren zu lassen. Es ist da nicht so frei, wie in anderen Sprachen, wo es wirklich wurst ist, je nachdem wie man es lieber hat.
02/12/2012 11:50 MoepMeep#30
Quote:
Originally Posted by xNopex View Post
In Java ist das 'ne Coding Convention für die dir bei Aufgaben massig Punkte abgezogen werden, wenn du die scheiß Klammer in eine eigene Zeile setzt... Ich musste das leidvoll lernen.. :( Also vllt. ist der Urheber des Codes auch ein Javanianer.
Da bist du nicht der einzige ._.