|
You last visited: Today at 19:07
Advertisement
Anfänger Problem
Discussion on Anfänger Problem within the C/C++ forum part of the Coders Den category.
02/10/2012, 07:41
|
#16
|
elite*gold: 0
Join Date: Feb 2012
Posts: 37
Received Thanks: 10
|
Quote:
Originally Posted by Seelenmeister
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
|
|
|
02/10/2012, 16:09
|
#17
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
|
Der C++ Stil von getchar wäre btw. cin.get().
|
|
|
02/10/2012, 22:35
|
#18
|
elite*gold: 0
Join Date: Oct 2008
Posts: 1,637
Received Thanks: 1,119
|
Quote:
Originally Posted by MrSm!th
Der C++ Stil von getchar wäre btw. cin.get().
|
müsste das nicht std::cin.get() sein?
|
|
|
02/10/2012, 23:07
|
#19
|
elite*gold: 5
Join Date: Sep 2006
Posts: 385
Received Thanks: 218
|
Quote:
Originally Posted by Seelenmeister
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:
Hier wird in mehreren Beiträgen davon abgeraten usings in den globalen scope zu schreiben.
Quote:
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:
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.
|
|
|
02/10/2012, 23:52
|
#20
|
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
|
Quote:
wird gar nix machen.
(fehler nr 7...)
|
|
|
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
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
|
#22
|
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  ).
|
|
|
02/11/2012, 14:13
|
#23
|
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
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? :>
|
|
|
02/11/2012, 16:10
|
#24
|
elite*gold: 5
Join Date: Sep 2006
Posts: 385
Received Thanks: 218
|
Quote:
Originally Posted by MrSm!th
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
|
#25
|
elite*gold: 50
Join Date: Mar 2010
Posts: 1,373
Received Thanks: 521
|
Quote:
Originally Posted by Nightblizard
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
|
#26
|
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.
|
|
|
02/11/2012, 17:07
|
#27
|
elite*gold: 0
Join Date: Feb 2012
Posts: 37
Received Thanks: 10
|
Quote:
Originally Posted by xNopex
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
|
#28
|
elite*gold: 5
Join Date: Sep 2006
Posts: 385
Received Thanks: 218
|
Quote:
Originally Posted by jacky919
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
|
#29
|
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.
|
|
|
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
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 ._.
|
|
|
 |
|
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 19:08.
|
|