Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 11:02

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Anfänger Problem

Discussion on Anfänger Problem within the C/C++ forum part of the Coders Den category.

Reply
 
Old 02/10/2012, 07:41   #16
 
elite*gold: 0
Join Date: Feb 2012
Posts: 37
Received Thanks: 10
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: 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
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
käsekuchen11elf is offline  
Old 02/10/2012, 16:09   #17


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
Der C++ Stil von getchar wäre btw. cin.get().
MrSm!th is offline  
Thanks
1 User
Old 02/10/2012, 22:35   #18
 
Tyrar's Avatar
 
elite*gold: 0
Join Date: Oct 2008
Posts: 1,637
Received Thanks: 1,119
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?
Tyrar is offline  
Old 02/10/2012, 23:07   #19
 
elite*gold: 5
Join Date: Sep 2006
Posts: 385
Received Thanks: 218
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:
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.
2. Das macht nicht der Debugger zu, sondern dein Betriebssystem. Das Programm ist beendet; kein Grund die Konsole länger offen zu halten.




Nightblizard is offline  
Old 02/10/2012, 23:52   #20
 
Dr. Coxxy's Avatar
 
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
Quote:
system("PASUE");
wird gar nix machen.

(fehler nr 7...)
Dr. Coxxy is offline  
Old 02/11/2012, 00:21   #21
 
elite*gold: 42
Join Date: Jun 2008
Posts: 5,425
Received Thanks: 1,888
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.
MoepMeep is offline  
Old 02/11/2012, 12:16   #22
 
L0wByte's Avatar
 
elite*gold: 0
Join Date: Jan 2012
Posts: 2
Received Thanks: 0
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 ).
L0wByte is offline  
Old 02/11/2012, 14:13   #23


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
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:
Würdest du den Code des Makros vielleicht hier posten? :>
MrSm!th is offline  
Old 02/11/2012, 16:10   #24
 
elite*gold: 5
Join Date: Sep 2006
Posts: 385
Received Thanks: 218
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
Nightblizard is offline  
Thanks
1 User
Old 02/11/2012, 16:31   #25
 
elite*gold: 50
Join Date: Mar 2010
Posts: 1,373
Received Thanks: 521
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.
jacky919 is offline  
Old 02/11/2012, 16:34   #26
 
xNopex's Avatar
 
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
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.
xNopex is offline  
Old 02/11/2012, 17:07   #27
 
elite*gold: 0
Join Date: Feb 2012
Posts: 37
Received Thanks: 10
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?
käsekuchen11elf is offline  
Old 02/11/2012, 17:20   #28
 
elite*gold: 5
Join Date: Sep 2006
Posts: 385
Received Thanks: 218
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.
Nightblizard is offline  
Old 02/11/2012, 17:27   #29
 
xNopex's Avatar
 
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
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.
xNopex is offline  
Old 02/12/2012, 11:50   #30
 
elite*gold: 42
Join Date: Jun 2008
Posts: 5,425
Received Thanks: 1,888
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 ._.
MoepMeep is offline  
Reply


Similar Threads Similar Threads
Problem(Anfänger)
11/08/2010 - Minecraft - 6 Replies
Ich hab ein Problem und zwar: Ich hab beim Singelplayer angefangen und versuche gerade nen Baum mit den Händen zu klopen damit ich holz bekomme aber ich hau ja da 5 minuten drauf und es passiert nichts ich bekommm kein holz Was ist das los?
Auto It Problem ( Anfänger )
11/02/2010 - AutoIt - 4 Replies
Hey Leute, ich arbeite erst seit heute mit AutoIt weil ich ein paar Bots für Last Chaos machen wollte. Dazu habe ich mir Forsaken sein Tutorial angeschaut. Leider ist es Englisch und ich habe mir nur das Tutorial durchgelesen weil ich die Deutschen irgentwie nciht checke. Bei seinem TuT hab ich genau das getan das ich so ein Fenster von Auto it bekommen wie bei Forsaken. http://img837.imageshack.us/img837/9162/14m6f61.p ng
[Anfänger~C++]Problem
10/19/2010 - C/C++ - 3 Replies
In meinen Buch bin ich jetzt auf Funktionsdefinierung/parameterübergabe gestoßen,ich verstehe aber das mit den parameter nicht zum Beispiel steht in meinen Buch: 1.Definieren Sie für die Funktion einen Parameter vom Typ string void gruss(string name) { cout<<"Hallo Programmierer!" <<endl; } 2.Verwenden Sie den Parameter im Anweisungsblock der Funktion void gruss(string name) { cout<<"hallo " <<name <<"!" <<endl;
[C#] Anfänger Problem
03/30/2010 - .NET Languages - 8 Replies
Hey, Ich hab am Freitag mit C# angefangen und gleich auch mich ein bisschen eingeübt. Jetzt habe ich ein paar kleine Fragen: Ich habe eine GUI mit diesen Steuerelementen: http://picbanana.com/images/testrmr.jpg Wenn ich jetzt z.B. in die erste Textbox "Test22" schreibe und in die 2. "Test33" sowie auch in die 3. "Test44" will ich das per Tastendruck, der folgende Bind ausgeführt wird und dies auch in allen Fenstern. Die Buttons dienen dazu, dass man einen individuellen HotKey für den...
Autoit Problem *Anfänger*
07/26/2009 - AutoIt - 4 Replies
Hi Leute, ich habe ein problem ^^ Ich möchte eine Einfache Form erstellen mit einem Button . So weit so gut..habs halt mit Koda gemacht und so sieht es bis jetz aus Schön schön, nur ich möchte jetz, dass wenn ich auf den Button Klicke er den Pc herunterfährt Ich habe es so ausprobiert Mir fiel nichts anderen ein als



All times are GMT +1. The time now is 11:03.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.