# C++, suche Tutorial



## Silent12 (11. Juni 2011)

Hallo ich wollte jetzt mal mit C++ anfangen habe aber bisher nur Programmierkenntnisse in CSS und Html, deshalb bräuchte ich ein Tutorial für totale Anfänger auf dem Gebiet. Ziel: Spiele programmieren.

LG
silent12


----------



## Crysis nerd (11. Juni 2011)

Hey Silent,
ich weiß nich ob es dir schon klar ist, aber bis du Spiele programmieren kannst, hast du echt einen weiten Weg vor dir. Wenn man mal textbasierte Spiele wie Tic-Tac-Toe in der Konsole ausschließt 
CSS und HTML sind keine Programmiersprachen (eigens diskutiert in meinem dämlichen Thread ), aber sie sind trotzdem ein guter Anfang. C++ wird zwar ganz anders aufgebaut, aber jegliches technische Vorwissen ist gut.

Ich empfehle dir, wie jedem Neuling, erstmal mit den Grundlagen in der Konsole anzufangen.
Man kann dir entweder kostenlose Internet Tutorials anbieten oder Bücher. Ich persönlich finde ein Buch garnich schlecht, besonders wenns auch als Nachschlagewerk dient. Falls du also wohl Geld ausgeben willst, kann ich dir "C++ lernen und professionell anwenden". Es ist gerade nicht in Arm und Blickreichweite.. Wenn du willst, such ich dir die ISBN raus.
An Online Tutorials gibts ein Riesen angebot.. so viele schlechte gibts eigentlich nicht. Da sollte Google recht schnell helfen.

Noch ein Punkt, der dir vllt. noch nicht klar ist: Du brauchst eine Entwicklungsumgebung (+Compiler), die nicht wie bei CSS noch aus dem normalen Windows Editor bestehen kann. Visual Studio von Microsoft ist einer der beliebtesten Umgebung, naja zumindest meist genutzten. Ich will dich nich auf Windows only schleifen, aber ich finde die Software auch ganz gut. (BTW: ich weiß garnich, wahrscheinlich kann man damit sogar doch für andere Plattformen compilieren..)
Die Software kostet eigentlich etwas. Es gibt allerdings die Express Version, die garnichts kostet und eine "mittlere" Version, die du als Schüler kostenlos auf DreamSpark.com bekommest (irgendwie jedenfalls hat man mir gesagt )

Wenn du noch Fragen hast, ich denke diese Forum wird dir gerne weiterhelfen.

mfg
Lukas


----------



## hardware_fanatiker (12. Juni 2011)

Hi also ich kann als tutorial das von highscore.de empfehlen. Allerdings musst du dafür relativ ausdauernd sein, weil das ganze Tutorial ohne GUI auskommt, aber dafür hast du dann die basics drin und kannst selber wählen, welche GUI deinem Anspruch genügt.


----------



## Silent12 (13. Juni 2011)

Ja ich bin mir bewusst, dass das seeeehr viel Arbeit ist und habe mir den dev c++ compiler geholt.  Danke für die vielen Tipps und Anregungen. Die highscore tutorials sehn auf den ersten blick auch echt gut aus


----------



## taks (13. Juni 2011)

Silent12 schrieb:


> Ja ich bin mir bewusst, dass das seeeehr viel Arbeit ist und habe mir den dev c++ compiler geholt.  Danke für die vielen Tipps und Anregungen. Die highscore tutorials sehn auf den ersten blick auch echt gut aus


 
Ich habs auch mit dev c++ und dem highscore Tutorial gelernt. Obwohl ich mir nachert auch noch ein Buch zugelegt habe.


----------



## Fragile Heart (14. Juni 2011)

Eine kleine Lektüre für dich: Teach Yourself Programming in Ten Years


----------



## Crysis nerd (14. Juni 2011)

@Fragile Heart: Der Link gefällt mir  Aber nach 10 Jahren ist man schon gut. Also richtig gut. Man kann locker nach 3 Jahren stolz behaupten, dass man C++ kann. Aber nungut, den Link kann man immer schön Anfängern zur Demotivation schicken 

@ Die Sache mit Dev c++: Also ich hab damit auch angefangen.. und wenn sich da jetzt nicht viel verändert hat, ist die Umgebung von MS anfängerfreundlicher, meiner Meinung nach. Also wenn man sich nicht durch die riesige Fülle an Optionen bei Visual Studio ablenken lässt, dann würde ich auf jeden Fall sagen, dass es für Anfänger besser ist. Die Compilerausgabe ist erstmal hilfreicher und in deutsch (ja ich kann leider nicht soo gut englisch  ). Außerdem weißt es mit vielen Warnings auch auf Sachen hin, die nicht auffallen würden.. Und (ich weiß nicht ab welcher Version), aber das RealTime Syntax Checking gefällt mir auch..
Außerdem liebe ich die kranken Debug funktionen , wobei ich NICHT sagen kann, was dev c++ da so drauf hat, da hab ichs nie ausprobiert..

Und nochmal mein Tipp: Ein buch schadet nich


----------



## Fragile Heart (14. Juni 2011)

Crysis nerd schrieb:


> @Fragile Heart: Der Link gefällt mir  Aber nach 10 Jahren ist man schon gut. Also richtig gut. Man kann locker nach 3 Jahren stolz behaupten, dass man C++ kann. Aber nungut, den Link kann man immer schön Anfängern zur Demotivation schicken


 
Nein, der Link soll nicht demotivieren! Er soll nur die Erwartungen auf ein Boden zurückholen. 

Es ist nichts schlimmer als wenn man zu hohe erwartungen hat und es nicht geht. Das bedeutet in diesen Fall nämlich nicht das man schlecht ist, sondern nur das man zu viel erwartet, aber das merken viele Anfänger nicht!


----------



## Crysis nerd (14. Juni 2011)

Mh jao das meinte ich auch.. Ich weiß noch, als ich mit C++ angefangen hatte (hatte html und ein wenig python kenntnisse). Und nach ca 2 Wochen Übung und Gesprächen mit einem, ders drauf hatte, meinte ich innerhalb von einer Woche ein Moorhuhn abklatsch zu programmieren 
Ich wäre heute (~2 Jahre später) vllt. in der Lage so etwas in einer Woche zu machen, wenn wirklich schlecht wird, und auch nur mit der Hilfe einer Engine


----------



## Fragile Heart (14. Juni 2011)

Man muss sich viel Zeit nehmen um zu lernen, und das muss sich jeder bewusst sein. Letztendlich braucht man auch ein Gefühl für die Sprache und das entwickelt sich nicht in ein paar Tagen.


----------



## Crysis nerd (14. Juni 2011)

Oja... das ist etwas, was man eigentlich nicht verstehen kann, bevor man es nicht hat. Das Gefühl dabei. Man kann die Syntax perfekt beherschen und trotzdem kommt man nicht voran..
Und dieses Gefühl bekommt man durch Erfahrung, und das nur durch Machen, machen und machen! Also mein tipp ist auf jedenfall noch: Egal wie demotiviert man manchmal ist, irgendwann einfach weitermachen. Es lohnt sich.. Und im Übrigen: Das Gefühl für Programmiersprachen kann man dann fast bei jeder Sprache anwenden.. ob PHP, C#, Java oder irgendwelchen anderen Programminternen Scriptsprachen. Das ist das tolle daran, dass man diese Erfahrung nicht verliert und praktisch immer anwenden kann, nur den Syntax muss man neu lernen, was recht schnell geht 

Hört sich gerade iwie bisl dämlich an, als ob ich öörbelster Pro wäre, aber ich will nunmal einfach das berichten, wovon ich berichten kann


----------



## WallaceXIV (14. Juni 2011)

Hab mir jetzt nicht alles durchgelesen, aber es gibt Visual Studio 2008 in der kostenlosen Express Version. An Anfang hat mir die Seite geholfen: Einfhrung in C++ - Einfhrung


----------



## Silent12 (19. Juni 2011)

so 1 Frage: Wie würdet ihr das programmieren ? 

Entwickeln Sie eine C++-Anwendung, die den Anwender zur Eingabe von drei  Zahlen auffordert. Das Programm soll den Wert 10 zur ersten  eingegebenen Zahl hinzuaddieren, das Ergebnis mit der zweiten  eingegebenen Zahl multiplizieren und dann durch die dritte eingegebene  Zahl dividieren. Die Berechnung soll hierbei innerhalb einer einzigen  Code-Zeile erfolgen. Das Ergebnis soll auf den Bildschirm ausgegeben  werden.

Komme gerade nicht weiter.
LG
Silent12


----------



## Crysis nerd (19. Juni 2011)

Woran scheiterst du jetzt? Ich will dir keinen fertigen Code hinbatzen, das hällt den Lerneffekt recht stark in Grenzen :/
AN der Eingabe? oder an der Berechnung?

Bei Eingabe würd ich mir mal "cin" angucken

```
int Eingabe1;
cout<< "Bitte erste Zahl eingeben\n";
cin >> Eingabe1;
cout<< "Ihre eingabe war: " << Eingabe1;
```


----------



## Fragile Heart (20. Juni 2011)

Ich denke das Programm irgendwie zum laufen zu bekommen, sollte nicht so das Problem sein oder? Interessanter wird es dann schon, die Fehlermöglichkeiten der Usereingabe zu untersuchen.


----------



## Silent12 (20. Juni 2011)

genau soweit kam ich bis jetzt auch mit den ganzen Eingaben, aber es klappt bei mir irgendwie nicht der 1.Eingabe den Wert 10 dazu zu addieren (ich muss ja eine neue Variable erstellen die am Ende ausgegeben wird zB x, aber was ist falsch daran wenn ich erstmal int x;  und dann x = Eingabe1 + 10 ......... schreibe ?)

LG
silent12


----------



## bingo88 (20. Juni 2011)

Ich habe das so verstanden, dass erst alles eingelesen werden soll und dann die Berechnung durchgeführt werden soll.

```
int e1, e2, e3;
// Eingabe...
int ergebnis = ((e1 + 10) * e2) / e3; // Berechnung
// Ausgabe...
```


----------



## Bierseppi (20. Juni 2011)

du nimmst die eingaben :
cin >> Eingabe1;
Eingabe1 = Eingabe1 + 10; 
das war das mit dem hinzuzählen

EDIT: zu langsam aber das geht auch ist nur ne einfache formel


----------



## Silent12 (20. Juni 2011)

#include <iostream> 
#include <string> 
int zahl1,zahl2,zahl3,x;
int main() 
{ 
  std::string zahl1; 
  std::cin >> zahl1; 
  std::string zahl2; 
  std::cin >> zahl2; 
  std::string zahl3; 
  std::cin >> zahl3; 


x = (zahl1 + 10)* zahl2 / zahl3
  std::cout << "Ergebnis " << x << std::endl; 

}

Was ist daran falsch ?


----------



## fadade (20. Juni 2011)

```
std::string zahl1; //definition der zahlen als string
```

das is in der Kombination mit dem:


```
x = (zahl1 + 10)* zahl2 / zahl3 //die zahlen sind vom typ string, müssen für die rechnung aber vom typ int (oder double/float) sein
```
falsch.

Du definierst die zahl1, zahl2, zahl3 als String (Zeichenfolge), benutzt sie aber in einer rechnung
Dort solltest du die String-Eingabe noch irgenwo in eine int-Zahl konvertieren


----------



## Fragile Heart (20. Juni 2011)

Silent12 schrieb:


> #include <iostream>
> #include <string>
> int *zahl1,zahl2,zahl3*,x;
> int main()
> ...


 Fällt es dir jetzt auf?


----------



## Silent12 (20. Juni 2011)

Dann müsste ich doch eigentlich die Zeilen mit string einfach weglassen könnnen, aber dann meldet er mir einen Fehler in der Ausgabezeile.
Sorry habe gerade erst mit c++ angefangen und zu schnell durchgeheizt .

LG
silent12


----------



## <BaSh> (20. Juni 2011)

1. Du initialisierts deine Variablen zum Teil zweimal.
Außerdem würde ich die Zahl- sowie die Ergebnis Variable auf double setzten. Da es beim dividieren eventuell zu nicht ganzen Zahlen kommen kann. Zum Beiapiel wenn die Zahlen 7 und 2 dividiert werden sollen.


----------



## Bierseppi (20. Juni 2011)

und das std brauchst du auch nicht davor


----------



## Silent12 (20. Juni 2011)

#include <iostream> 
#include <string> 
int *zahl1,zahl2,zahl3;*
*double x;*
int main() 
{ 
cin >> zahl1;  
cin >> zahl2; 
cin >> zahl3; 


x = (zahl1 + 10)* zahl2 / zahl3
cout << "Ergebnis " << x << endl; 

}

warum bringt der mir dann immer noch fehler ? sry hab noch ka ^^


----------



## bingo88 (20. Juni 2011)

std darfst du nur weglassen, wenn du den namespace importiert hast:

```
using namespace std; // z. B. oben in der .cpp Datei einfügen; das gehört nicht in Header-Dateien!!!
```
Evtl. fehlt dir noch ein return value.

```
int main()
{
    // ...
    return 0; // Du hast ja eine Funktion mit int als Rückgabetyp, also solltest du auch was zurückgeben!
}
```

Edit: Welche Fehlermeldungen spcukt dein Compiler denn eigentlich aus?


----------



## Silent12 (20. Juni 2011)

Bei cout << "Ergebnis" << x << endl;


----------



## bingo88 (20. Juni 2011)

Silent12 schrieb:


> Bei cout << "Ergebnis" << x << endl;


Du hast in der Zeile davor evtl das ; vergessen? *ratemodus aktiv*


----------



## Silent12 (20. Juni 2011)

Tada ^^ thx an alle  ich glaube dadurch habe ich die Sache bis jetzt kapiert


----------



## Bierseppi (20. Juni 2011)

warscheindllich schon


----------



## Fragile Heart (21. Juni 2011)

bingo88 schrieb:


> Du hast in der Zeile davor evtl das ; vergessen? *ratemodus aktiv*


Ok, den hab ich dann echt noch übersehen.  Aber was benutzt du den da für ein Compiler, Silent?


----------



## Silent12 (21. Juni 2011)

Dev c++


----------



## Silent12 (23. Juni 2011)

#include <iostream> 

int main() 
{ 
  int i; 

  std::cout << "Geben Sie eine Zahl ein: " << std::flush; 
  std::cin >> i; 
  if (i < 100) 
  { 
    std::cout << "Sie haben eine Zahl kleiner als 100 eingegeben." << std::endl; 
  } 
  else if (i < 200) 
  { 
    std::cout << "Sie haben eine Zahl kleiner als 200 eingegeben." << std::endl; 
  } 
  else 
  { 
    std::cout << "Sie haben eine Zahl groesser gleich 200 eingegeben." << std::endl; 
  }

  else if (i < 500)
  {
        std::cout << "Sie haben eine Zahl kleiner als 500 eingegeben." << std::endl;
  }
  else
  { std::cout << "Sie haben eine Zahl groesser/gleich 500 eingegeben." << std::endl;
  }




    system ("Pause");
}



Ich finde den Fehler bei dem 2.  else if nicht.
Findet ihn jemand?

LG
silent12


----------



## <BaSh> (23. Juni 2011)

Silent12 schrieb:


> #include <iostream>
> 
> int main()
> {
> ...



Das 2te Else if soll doch sicherlich ein if sein oder?
Denn ein else if ohne vorheriges if wird nicht funktionieren


----------



## Silent12 (23. Juni 2011)

Oh ja xD thx 

LG
silent12


----------



## Silent12 (23. Juni 2011)

Noch 1 Frage  wo ist der unterschied zwischen std::cout <<"...." << std::endl; und std::cout <<"...." << std:flush; ??
LG
silent12


----------



## pyro539 (23. Juni 2011)

std::endl gibt ein "\n" aus, also eine neue Zeile und flusht dann. std::flush flusht nur.

Zum Begriff flushen:
std::cout hat einen internen Buffer, in die die Daten zuerst geschrieben werden. Mit std::flush weißt man std::cout explizit an, die Daten auf die Konsole zu schrieben (also den Bufffer zu flushen).


----------



## Silent12 (23. Juni 2011)

Ah ok danke. Und nun also eine andere Aufgabe war:

Entwickeln Sie eine C++-Anwendung, die den Anwender zur Eingabe einer  vierstelligen Zahl auffordert. Das Programm soll daraufhin die Quersumme  der Zahlerrechnen und das Ergebnis dann auf  den Bildschirm ausgeben.

Die habe ich so gelöst:


#include <iostream> 

int main() 
{ 

int ziffer1, ziffer2, ziffer3, ziffer4 ,eingabe, ausgabe;

std::cout <<"Geben sie eine 4stellige Zahl ein" << std::endl;
std::cin >> eingabe;

ziffer1 = eingabe/1000;

ziffer2 = (eingabe - ziffer1*1000)/100;

ziffer3 = (eingabe - ziffer1*1000 - ziffer2*100)/10;

ziffer4 = (eingabe - ziffer1*1000 - ziffer2*100 - ziffer3*10);

ausgabe = ziffer1 + ziffer2 + ziffer3 +ziffer4;

std::cout <<"Die Quersumme ihrer eingegeben Zahl lautet" << ausgabe << std::endl;

    system ("Pause");
}


Nun soll ich die Aufgabe mithilfe von Schleifen lösen frage mich aber wie ich da Schleifen einbauen soll. Kann jemand helfen? 

LG
silent12


----------



## schlappe89 (23. Juni 2011)

Ich wollte dir noch einen Tipp geben. Und zwar stellen Professoren von Universitäten und Hochschulen gerne mal Skripte online.
z.B. hier Informatik für EIT - Informatik - Hochschule Darmstadt - Hessen

Gibt bestimmt noch 1000 andere.


----------



## Silent12 (24. Juni 2011)

Thx für den Tipp,.... hat noch jemand eine Idee zur Frage davor ? 



oder hier den Fehler?:


#include <iostream>

using namespace std;

int a,b,c,d;

int main ()

{ cout <<"Geben sie 1 Zahl ein" << endl;
  cin >> a;

  cout <<"Geben sie 1 Zahl ein" << endl;
  cin >> b;

  cout <<"Geben sie 1 Zahl ein" << endl;
  cin >> c;

  cout <<"Geben sie 1 Zahl ein" << endl;
  cin >> d;

  if( a<b, a<c ,a<d)
  { cout <<"kleinste Zahl:" << a << endl;
}

if(b<a, b<c, b<d)
{ cout <<"kleinste Zahl:" << b << endl;
}


if(c<a, c<b, c<d)
{ cout <<"kleinste Zahl:" << c << endl;
}


if(d<a, d<b, d<c)
{ cout <<"kleinste Zahl:" << d << endl;
}

system("Pause");
}

LG
silent12


----------



## bingo88 (24. Juni 2011)

Konstrukte der Art

```
if (a < b, a < c, c < d) { ... }
```
 habe ich noch nicht gesehen ^^

Du meinst sicher sowas hier:

```
if (a < b && a < c && c < d) // falls (a < b UND a < c UND c < d)
{
}

if (a < b || a < c || c < d) // falls (a < b ODER a < c ODER c < d)
{
}
```


----------



## Silent12 (24. Juni 2011)

Oh man fail haha ja danke so jetzt läuft alles 

Jetzt muss ich nur noch rauskriegen wie man testet ob die eingegebene Zahl eine Primzahl ist (würde es gerne ohne if(eingabe =1,3,5,7,.....) schreiben.

LG
silent12


----------



## hardware_fanatiker (24. Juni 2011)

Ich denke mal du musst anstatt kommas bei den if-klammern, den Und-Operator &&  benutzen.


----------



## Silent12 (24. Juni 2011)

#include <iostream> 
using namespace std;

int eingabe;
int main() 

{ cout <<"Geben sie 1 Zahl zwischen 1 und 100 ein" << endl;
 cin >> eingabe;

 if (eingabe = 2 || 3 ||5|| 7|| 11 ||13|| 17|| 19|| 23|| 29 ||31|| 37 ||41|| 43|| 47|| 53|| 59|| 61|| 67|| 71|| 73|| 79|| 83|| 89||97);
 { cout <<"Sie haben eine Primzahl eingegeben" << endl;}


 else { cout <<"Sie haben keine Primzahl eingegeben." << endl; }

    system ("Pause");
}



 Wo ist der Fehler ?

LG
silent12


----------



## bingo88 (24. Juni 2011)

Silent12 schrieb:


> if (eingabe = 2 || 3 ||5|| 7|| 11 ||13|| 17|| 19|| 23|| 29 ||31|| 37 ||41|| 43|| 47|| 53|| 59|| 61|| 67|| 71|| 73|| 79|| 83|| 89||97);


 genau da


```
if (eingabe == 2 || eingabe == 3 || ...)
```


----------



## Criunk (24. Juni 2011)

Gabs nicht mal so ein Programm mit dem man sich 08/15 Spiele programmieren konnte , mit Gui?


----------



## Silent12 (24. Juni 2011)

Wenn ich das umstelle dann ändert sich bei mir am Fehler nichts da der Fehler immer noch bei dem "else..." angezeigt wird.

LG
silent12


----------



## schlappe89 (24. Juni 2011)

```
//Primzahlen bestimmen
#include <iostream>
using namespace std;
void main()

{
    const int limit=1000;
    int n=0, i=0, j=0, x=0, y=0;
    bool marked[1002]={0};
    int prime[limit];

    //Bereich der Primzahlen wählen
    while ((n>limit)||(n<=1)) //Wiederholung bei ungültiger Eingabe
    {
        cout<<"Suche nach Primzahlen < n (maximal 1000)\tn eingeben\t";
        cin>>n; //Eingabe
        if ((n>limit)||(n<=1)) //Plausibilitaetskontrolle
            cout<<endl<<"Ungueltige Eingabe!"<<endl;
        else break;
    }

    for (i=2;i<n;i++) //Primzahlen suchen
    {
        if (!marked[i])
        {
            marked[i]=1; // Platz i markieren
            prime[y]=i; //Primzahl in Array festlegen
            y=y+1;
            for (j=i;j<n;j++) //Vielfache von i markieren
            {    
                x=i*j;
                if (x>limit) break;
                marked[x]=1;
            }
        }
        else continue;
    }
    cout<<endl<<endl;
    for (i=0;i<y;i++) //Ausgabe
        cout<<prime[i]<<" "<<endl;
    if (n==2) cout<<n<<endl; //Sonderfall für n=2
}
```
Der sucht dir alle Primzahlen bis 1000 (änderbar) und speichert diese in ein Array. Vielleicht hilfreich für dich.

Das ist der Hintergedanke: http://de.wikipedia.org/wiki/Sieb_des_Eratosthenes


----------



## Silent12 (24. Juni 2011)

Danke aber ich wollte eig nur wissen was an dem "else" (der zeile) nicht stimmt weil ich will ja nich alle primzahlen suchen sondern nur für die eingegebenen zahlen wissen ob es eine primzahl ist/nicht ist.

LG
silent12


----------



## schlappe89 (24. Juni 2011)

> if (eingabe = 2 || 3 ||5|| 7|| 11 ||13|| 17|| 19|| 23|| 29 ||31|| 37  ||41|| 43|| 47|| 53|| 59|| 61|| 67|| 71|| 73|| 79|| 83|| 89||97)*;*



Das Semikolon muss weg.


----------



## Silent12 (24. Juni 2011)

Ah genau thx  Jetzt muss ich nur noch die Quersumme einer beliebigen Zahl errechnen. Kann jemand helfen ?

LG
silent12


----------



## schlappe89 (24. Juni 2011)

```
#include <iostream>
using namespace std;

void main()

{
    int zahl=0, quer=0;

    cin>>zahl;

    while (zahl > 0) 
    {
    quer = quer + zahl % 10;
    zahl = zahl/10;
    }    

    cout<<endl<<endl<<"Quersumme: "<<quer<<endl;
}
```
Bitteschön


----------



## Silent12 (24. Juni 2011)

DAnke aber bei mir läuft es irgendwie nicht (zeigt bei mir in der zeile nach dem void main () einen Fehler an.

LG
silent12


----------



## schlappe89 (24. Juni 2011)

Also bei mir gehts. Aber du sollst eigendlich die Grundidee aufnehmen, verstehen und dann selbst noch mal was schreiben. Sonst lernst du es nie 

Testen testen testen.


----------



## Silent12 (24. Juni 2011)

Ja tu ich eig auch immer aber ich weiß auch nicht warum es bei mir nicht läuft 

LG
silent12


----------



## schlappe89 (24. Juni 2011)

Siehst du einen Fehler im Syntax? Also ich nicht. Und mein Visual Studio 2010  compiliert mir das wunderbar.


----------



## Silent12 (24. Juni 2011)

Ich sehe auch keinen Fehler aber Dev C++ compiliert es nicht.


----------



## schlappe89 (24. Juni 2011)

Ich würd dir Microsoft Visual Studio empfehlen.

Hab mir heute auch mal die Express Version geladen, und die ist sehr gut.

Was ist denn die Fehlermeldung?


----------



## Silent12 (24. Juni 2011)

Bei der geschweiften Klammer hinter void main ()  ka wie der dadrauf kommt


----------



## bingo88 (24. Juni 2011)

void main() ist falsch, ich weiß nicht, wo alle das immer her nehmen, aber das ist laut C Standard ungültig ("Program behavior undefined"). In C++ ist es explizit verboten. Einige Compiler akzeptieren es trotzdem (Visual Studio z.B.) andere nicht.

Also entweder int main() oder int main(int argc, char *argv[]) aber bitte nicht void!


----------



## Silent12 (24. Juni 2011)

Ah danke ich habe mich auch schon gefragt was das mit dem void eig. ist.
Ok jetzt habe ich das auch endlich mal mit der Quersumme kapiert. Thx an alle.

LG
silent12


----------



## schlappe89 (24. Juni 2011)

bingo88 schrieb:


> void main() ist falsch, ich weiß nicht, wo alle das immer her nehmen, aber das ist laut C Standard ungültig ("Program behavior undefined"). In C++ ist es explizit verboten. Einige Compiler akzeptieren es trotzdem (Visual Studio z.B.) andere nicht.
> 
> Also entweder int main() oder int main(int argc, char *argv[]) aber bitte nicht void!


 
Naja void main deshalb weil die Funktion keinen Wert zurückgibt. So hat es uns der Info Prof erklärt.


----------



## bingo88 (24. Juni 2011)

Schau z. B. mal hier.

Noch nen anderes Zitat:


> *What's the deal with void main()*
> Under  regular function calling/returning in C and C++, if your don't ever  want to return anything from a function, you define it's return type as  void.  For example, a function that takes no arguments, and returns  nothing can be prototyped as:
> 
> ```
> ...


Quelle: cprogramming.com


----------



## schlappe89 (25. Juni 2011)

Schade  Wenn ich noch studieren würde, dann würde ich ihn drauf ansprechen warum er uns so einen Müll erzählt hat.


----------



## bingo88 (25. Juni 2011)

schlappe89 schrieb:


> Schade  Wenn ich noch studieren würde, dann würde ich ihn drauf ansprechen warum er uns so einen Müll erzählt hat.


 Glaub mir, das höhre ich nicht zum erste mal 

Es war wohl mal anno dazumal gültig, das so zu machen, aber schon damals war es nicht besonders schön.


----------



## Fragile Heart (25. Juni 2011)

bingo88 schrieb:


> ... aber schon damals war es nicht besonders schön.



Der Kampf ist Sinnlos, glaub mir ...


----------



## Silent12 (25. Juni 2011)

Bevor ihr noch lange diskutiert hätte ich noch mal eine Frage  :


#include <iostream> 
using namespace std;


void set(int a) 
{ 
  a = 10; 
} 

int main() 
{     int ziffer1, ziffer2, ziffer3, ziffer4,a,b,x,eingabe;
      cout <<"Geben sie eine 4stellige Zahl ein" << endl;
   cin >> eingabe;
   eingabe div 1000 = ziffer1;
   eingabe mod 1000 = a;
   a div 100 = ziffer2;
   a mod 100 = b;
   b div 10 = ziffer3;
   b mod 10 = ziffer4; 
   x = ziffer4*1000 + ziffer3*100 + ziffer2*10 + ziffer1;


  set(x); 
  std::cout << x << std::endl; 


    system ("Pause");
}



Warum zeigt Dev c++ mir einen Fehler bei der ersten Rechnung mit "eingabe" an und wie könnte ich das Programm umformen, damit es nicht nur für 4stellige Zahlen funktioniert.


----------



## Fragile Heart (25. Juni 2011)

> eingabe div 1000 = ziffer1;
> eingabe mod 1000 = a;
> a div 100 = ziffer2;
> a mod 100 = b;
> ...


Vielleicht bin ich gerade etwas blöde, aber was machst du denn da?


----------



## Silent12 (25. Juni 2011)

Ich zerlege Die eingegebene Zahl in ihre einzelnen ziffern oder funktioniert das so nicht ?


----------



## Fragile Heart (25. Juni 2011)

Wäre es dann nicht so Sinnvoller?


```
eingabe = ziffer1 / 100;
eingabe = a % 1000;
...
```


----------



## Silent12 (25. Juni 2011)

Ist das nicht genau das gleiche nur, dass div mit / und mod mit % getauscht wird und dadurch die Gleichung etwas umgestellt wird?


----------



## Fragile Heart (25. Juni 2011)

Also wenn es das wirklich gibt, kenne ich es nicht. Aber in C++ findet man immer mal wieder was neues


----------



## Silent12 (25. Juni 2011)

oh hab mich glaub vertan  stimmt aber ich müsste doch eigentlich das mod und das div jeweils durch "/" und "%" ersetzen können oder nicht ?


----------



## Fragile Heart (25. Juni 2011)

Aber nicht vor der Zuweisung (= operator).


----------



## Silent12 (25. Juni 2011)

Vor welcher Zuweisung, welchen operator ?

Oder wo sind jetzt noch Fehler ?


#include(iostream)
using namespace std;


int ziffer1, ziffer2, ziffer3, ziffer4,ziffer5, ziffer6, c, d, a,b,x,eingabe;


void set(int &a)
{  
a = 10;
}




int main ()

{  cout << "Geben sie eine Zahl zwischn 1-10000 ein" << endl;
 cin >>eingabe;


if (eingabe/1000 >1) {

eingabe / 1000 = ziffer1;
eingabe % 1000 = a;
a /100 = ziffer2;
a % 100 = b;
b / 10 = ziffer3;
b % 10 = ziffer4;
x = ziffer4*1000 + ziffer3*100 + ziffer2*10 + ziffer1;
   }

if (eingabe/100 >1)
{ eingabe / 100 = ziffer1;
  eingabe % 100 = a;
  a / 10 = ziffer2;
  a % 10 = ziffer3;
   x = ziffer1*100 + ziffer2*10 +ziffer3;           }

if (eingabe/10 >1)
{ eingabe / 10 = ziffer1;
  eingabe % 10 = ziffer2;
  x = ziffer1*10 + ziffer2;      }

if (eingabe/10000 >1)
{
eingabe / 10000 = ziffer1;
eingabe % 10000 = a;
a / 1000 = ziffer2;
a % 1000 = b;
b / 100 = ziffer3;
b % 100 = c;
c / 10 = ziffer4;
c % 10 = ziffer5;
x = ziffer4*10000 + ziffer3*1000 + ziffer2*100 + ziffer1*10 + ziffer5;
 }

Es wird mir ein Fehler bei dem cout... angezeigt!


----------



## Fragile Heart (25. Juni 2011)

Noch mal! Was genau willst du hier ausführen?


```
eingabe / 1000 = ziffer1;
```


----------



## Silent12 (25. Juni 2011)

An der Stelle wird die 1.Ziffer einer 4Stelligen Zahl abgetrennt ( Div rundet nicht ) Bsp.: 3432/1000 = 3 (1.Ziffer)
In manchen Teilen habe ich am Ende bei der Zusammenrechnung von x = die erste mit der letzten Ziffer vertauscht habe ich aber schon behoben


----------



## Fragile Heart (25. Juni 2011)

Drehe es um! Das Zuweisungsziel musst beim = immer links stehen!


```
ziffer1 = eingabe / 1000;
```
 
Der Compiler kann das nicht anders interpretieren!


----------



## Silent12 (25. Juni 2011)

Ah ok  aber warum zeigt Dev C++ mir immer einen Fehler beim cout an ?


----------



## Fragile Heart (25. Juni 2011)

Also wenn du den ganzen Quellcode gepostet hast, dann fehlt eine } am Ende.


----------



## Silent12 (25. Juni 2011)

#include(iostream)
using namespace std;


int ziffer1, ziffer2, ziffer3, ziffer4,ziffer5, ziffer6, c, d, a,b,x,eingabe;


void set(int &a)
{  
a = 10;
}




int main ()

{  cout << "Geben sie eine Zahl zwischn 1-10000 ein" << endl;
 cin >>eingabe;


if (eingabe/1000 >1) {

ziffer1 = eingabe / 1000;
a = eingabe % 1000;
ziffer2= a /100;
b= a % 100;
ziffer3 = b / 10;
ziffer4 = b % 10 ;
x = ziffer4*1000 + ziffer3*100 + ziffer2*10 + ziffer1;
   }

if (eingabe/100 >1)
{  ziffer1= eingabe / 100;
   a= eingabe % 100;
   ziffer2= a / 10;
   ziffer3= a % 10;
     x = ziffer3*100 + ziffer2*10 +ziffer1;           }

if (eingabe/10 >1)
{ ziffer1= eingabe / 10;
ziffer2= eingabe % 10;
 x = ziffer2*10 + ziffer1;      }

if (eingabe/10000 >1)
{
ziffer1= eingabe / 10000;
a= eingabe % 10000;
a / 1000 = ziffer2;
b= a % 1000;
ziffer3= b / 100;
c= b % 100;
ziffer4= c / 10;
ziffer5= c % 10;
x = ziffer5*10000 + ziffer4*1000 + ziffer3*100 + ziffer2*10 + ziffer1;
 }

 system ("Pause")
}             


Er meldet mir einen Fehler bei dem cout <<"..." << endl; 

Grüße 
silent12


----------



## Fragile Heart (25. Juni 2011)

> #include(iostream)


Hier vielleicht?


----------



## Silent12 (25. Juni 2011)

Ah danke  oh man wie komm ich eig. auf so unnötige Klammern ?^^ egal und am Ende hatte ich die Ausgabe noch vergessen jetzt aber per set(x) und cout << x << endl;  eingefügt .
So noch eine letzte Frage zu dem Abschnitt: Geht das hier nur mit add oder kann ich dort auch z.B. dividieren etc. ?

#include <iostream>   int add(int a, int b)  {    return a + b;  }   int main()  {    std::cout << 10 << " + " << 5 << " = " << add(10, 5) << std::endl;  } 

Grüße
silent12


----------



## Fragile Heart (25. Juni 2011)

Das kannst du mit jeder beliebigen Sache machen.


----------



## Silent12 (25. Juni 2011)

Aber ist add speziel auf Addition bezogen ? Weil ich will 2 Zahlen als Parameter einsetzen und die eine Zahl als Potenz der anderen Verwenden.


----------



## schlappe89 (25. Juni 2011)

Ich wollte dir noch mal nen kleinen Tipp geben. Schreib am besten am Anfang deines Codes immer was du damit machen willst.
z.B.

//Quersumme
//Quicksort
//Blablabla


Dann können andere besser reinfinden


----------



## Silent12 (25. Juni 2011)

Danke  

#include<iostream>
using namespace std;

double pow(double a, double b)
{
       return }

int main ()
{
    cout <<"Geben sie 2 Zahlen ein" <<endl;
    cin >> a;
    cin >> b;
  cout << pow(a, b) << endl;  


}

Wie kriege ich nach dem return a hoch b hin ? Und habe ich sonst noch Fehler übersehen ? 

Grüße 
silent12


----------



## schlappe89 (25. Juni 2011)

Also für ganzzahligen Exponent:


```
double power(double x, int n)

{
    if (n>=0)
    {
        double s=1.0;
        for (int i=0;i<n;i++)
            s=s*x;
            return s;
    }
    else
        return power(1/x,-n);
}
```


----------



## Silent12 (25. Juni 2011)

Thx, aber funktioniert es nicht auch mit meiner Methode ? (nach dem return noch a^b (für a hoch b)) aber in der zeile mit dem return zeigt er mir dann einen Fehler an. Wisst ihr warum ?


----------



## schlappe89 (25. Juni 2011)

Also der ^ Operator hat eine andere Funktion:
C++-Programmierung: Operatoren


----------



## Silent12 (25. Juni 2011)

Und wie ist der Operator für Potenzen ?


----------



## schlappe89 (25. Juni 2011)

Schau doch einfach in der Liste nach. Mir ist jedoch nicht bekannt, dass ein solcher Operator existiert.


schlappe89 schrieb:


> C++-Programmierung: Operatoren



Du kannst aber was mit der cmath Referenz cmath (math.h) - C++ Reference anfangen. Versuchs mal mit 
	
	



```
#include <cmath>
```

Dann kannst du z.B. das hier schreiben:


```
cout<<pow(2.0,3);
```

Ausgabe:


```
8
```


----------



## Silent12 (25. Juni 2011)

Ah Danke für die Antwort.

Aber dann würde ich nicht mehr auf das double pow(double a, double b) zugreifen oder ? 

Grüße 
silent12


----------



## schlappe89 (25. Juni 2011)

Nein tust du nicht. pow ist eine Funktion, die dir cmath bereitstellt.

Du kannst aber auch einfach selbst eine Funktion schreiben. Den Code für Potenzen mit ganzzahligem Exponent hab ich dir ja vorhin gepostet.


----------



## Silent12 (25. Juni 2011)

Aber wenn ich die Funktion mit pow.. nutze dann Brauche ich doch auch einen Rückgabewert der hinter return definiert wird.. und der wäre ?


----------



## schlappe89 (26. Juni 2011)

?

Du schreibst einfach:


```
//Potenz
#include <iostream>
#include <cmath>
using namespace std;

int main()
{
    double x,n;

    cout<<"Basis: ";
    cin>>x;
    cout<<"Exponent: ";
    cin>>n;
    cout<<endl<<x<<" hoch "<<n<<" = "<<pow(x,n)<<endl;

return 0;
}
```

Das wäre ein Programm, dass eine Potenz berechnet.


----------



## Silent12 (26. Juni 2011)

Aber ich sollte eig eine Funktion verwenden die 2 Parameter erwartet... trifft das dann immer noch zu ?


----------



## schlappe89 (26. Juni 2011)

Du "übergibst" der Funktion pow zwei Parameter: x und n

Also alles oke


----------



## Silent12 (26. Juni 2011)

Ah danke  aber eig müsste es ja dann auch so funktionieren:

#include<iostream>
using namespace std;

double pow(double a, double b)
{
       return pow(a,b);}

int main ()
{
    cout <<"Geben sie 2 Zahlen ein" <<endl;
    cin >> a;
    cin >> b;
  cout << pow(a, b) << endl;  


}

Aber er meldet mir einen Fehler bei dem cin >>a; was ich einfach nicht verstehe

Grüße 
silent12


----------



## <BaSh> (26. Juni 2011)

Du hast die Variablen a&b in deiner int main() Funktion nicht deklariert. Außerdem verstehe ich den sinn deiner Funktion pow nicht.


----------



## Silent12 (26. Juni 2011)

Ah danke eig. soll sie die eingegebene zahl a hoch die eingegebene zahl b errechnen, was aber irgendwie nicht funktioniert :-/


----------



## <BaSh> (27. Juni 2011)

Vielleicht hilft dir dieser Gedankenanstoß weiter:

```
int a = 4;
            int b = 5;
            int ergebnis = 0; 
            int temp = 0;
            
            
            
            

            for (int i = 0; i <= b; i++)
            {
                temp = a * a;
                       .
                       .
                       .
```


----------



## Silent12 (27. Juni 2011)

Danke für die Antworten ich wollte aber eig wissen was an meinem code falsch ist den ich auf der letzten seite oder so gepostet habe.
LG
silent12


----------



## Fragile Heart (27. Juni 2011)

```
double pow(double a, double b)
{
return pow(a,b);}
```
Also das mit der Namensgebung ist doch eigentlich nicht so schwer oder? Zweimal den gleichen Namen zu verwenden ist definitiv nicht die beste Idee! Was meinst du wohl was hier passiert? 

Mach doch lieber

```
double Potenz(double a, double b)
{
return pow(a,b);}
```


----------



## Silent12 (27. Juni 2011)

Ah jetzt kapier ichs  thx


----------



## fadade (27. Juni 2011)

es sollte doch bestimmt eine rekursive Methode werden 

naja, aber wie Fragile Heart schon schrieb, solltest du in deinem Code etwaige Mehrdeutigkeiten lieber vermeiden.

ich verwende manchmal auch extrem lange namen für funktionen und Variablen, damit ich die auseinanderhalten kann xDDD


----------



## Fragile Heart (27. Juni 2011)

Man kann gleich Namen verwenden, wenn aus den Kontext in dem man etwas verwendet klar ist was gemeint ist.  Das ist ja auch zum Teil gewollt, virtuelle Funktionen zum Beispiel, aber hier gibt es quasi keinen wirklich Kontext und der Compiler kann das nicht sauber auflösen. Also entweder wir haben eine rekusvive Funktion (eine Funktion die sich selbst wieder aufruft), was in deinen Fall zwangsläufig zu einen Stack overflow führt da keine Abbruchbedingung definiert ist, oder der Compiler jammert sofort (sehr Wahrscheinlich!).


----------



## Silent12 (27. Juni 2011)

Ich normalerweise auch aber hier gab es mal eine Ausnahme


----------



## Silent12 (27. Juni 2011)

Ohman warum habe ich da immer noch einen Fehler und vorallem warum bei dem return .. ? 

#include<iostream>
using namespace std;

double Potenz(double a, double b)
{
return pow(a,b);}

int main ()
{  int a, b;
cout <<"Geben sie 2 Zahlen ein" <<endl;
cin >> a;
cin >> b;
cout << pow(a, b) << endl;


}


----------



## bingo88 (27. Juni 2011)

1. Include <math.h> bzw <cmath> fehlt (für pow benötigt)?
2. return in der main() fehlt.


----------



## Silent12 (27. Juni 2011)

Return ? Bei mir funktioniert dank dem Tip jetzt alles (Ausgabe durch das cout ... auch)


----------



## Fragile Heart (27. Juni 2011)

Poste doch mal bitte in Zukunft die Fehlermeldung mit! Es ist nicht ganz so leicht hellzusehen wenn es drausen schon dunkel wird.


----------



## Silent12 (27. Juni 2011)

Ok tut mir Leid habe gerade zeitweise kurz kein Internet und schreibe deswegen nicht so ausführlich


----------



## bingo88 (27. Juni 2011)

Silent12 schrieb:


> Return ? Bei mir funktioniert dank dem Tip jetzt alles (Ausgabe durch das cout ... auch)




```
[B]int[/B] main ()
{  int a, b;
cout <<"Geben sie 2 Zahlen ein" <<endl;
cin >> a;
cin >> b;
cout << pow(a, b) << endl;
 
[B]// hier fehlt was...[/B]
}
```
Rückgabetyp ist int, Funktion gibt aber nichts zurück...


----------



## Silent12 (1. Juli 2011)

Aber was soll ich da zurückgeben wenn ich das Ergebnis oben schon zurückgebe ? 

Grüße 
silent12


----------



## hardware_fanatiker (1. Juli 2011)

0, aber das ist auch wieder Ansichtssache, wen du sehr korrekten Code schreiben wilst, den wirklich jeder compiler frisst, dann muss nen return 00 nach unten, aber in der regel geht es auch ohne.


----------



## Silent12 (2. Juli 2011)

Ok thx für die Antwort


----------



## Fragile Heart (4. Juli 2011)

hardware_fanatiker schrieb:


> 0, aber das ist auch wieder Ansichtssache, wen du sehr korrekten Code schreiben wilst, den wirklich jeder compiler frisst, *dann muss nen return 00 nach unten*, aber in der regel geht es auch ohne.



Warum?


----------



## Triniter (4. Juli 2011)

Warum man bei einer Funktion *int* main() auch ohne return 0; kompilieren soll geht mir so nich ganz in den Kopf.

Ich hab jetzt mal den Thread komplett durchgelesen und mir ist aufgefallen, dass du den Fehler begehst, den alle machen die mit Programmieren anfangen: Du setzt dich an den PC und tippst mal los. Ideal wäre es, wenn du hingest und erst mal Stift und Papier in die Hand nimmst und das Thema theoretisch angehst. Das klingt jetzt bei einer Funktion die dir die Quersumme einer Zahl berechnet arg übertrieben aber wenn du es dir nicht von Anfang an angewöhnst wird es später mal viel schwerer und spätestens dann wenn du komplexere Funktionen entwickeln willst kommst du ohne Vorarbeit abseits vom Compieler nicht drum rum. Das muss jetzt gar kein UML oä. im privaten Umfeld sein aber zumindest sollte man sich gedanken über die zu erstellenden Interfaces machen und diese dann mal textuell vorbereiten. Oftmals entdeckt man zu diesem Zeitpunkt schon ob ein Interface sinnvoll ist oder man sich permanent in den allerwertesten beißt wenn man es später mal verwenden will.


----------



## Silent12 (4. Juli 2011)

So noch einmal eine Frage: Bei der Erstellung von Strukturen kann man einfach eine Struktur erstellen, eine eingegebene Zahl darin speichern und sie wieder ausgeben oder muss ich dazu erstmal eine Variable vom Typ der Struktur erstellen und dann in dieser speichern ? 
Grüße 
silent12


----------



## Fragile Heart (4. Juli 2011)

Deine Struktur ist ja nur sowas wie eine Schablone, ohne eine Instance davon hast du kein Speicherplatz. Ergo, ohne Variable davon auch kein Speicherplatz und somit keine Nutzung.


----------



## Silent12 (4. Juli 2011)

Ok thx. Ich habe versucht diese Aufgabe zu lösen (Ausgabe zu Überprüfung dazu gefügt) 

Entwickeln Sie eine C++-Anwendung, die den Anwender zur Eingabe einer  Bestellung auffordert. Der Anwender muss hierbei der Reihe nach die  bestellte Ware, die Lieferanschrift, die Kreditkartennummer und das  Gültigkeitsdatum der Kreditkarte eingeben. Die Daten sollen hierbei in  geeigneten Variablen unter Zuhilfenahme benutzerdefinierter Strukturen  und Enumerationen gespeichert werden. Lieferanschrift und  Kreditkartendaten sollen jeweils in einer eigenen Struktur gespeichert  werden. Die Bestellung wird ebenfalls in einer eigenen Struktur  gespeichert, die sich der anderen beiden Strukturen bedient. Außerdem  soll das Land, das in der Lieferanschrift gespeichert wird, vom Typ  einer Enumeration sein.





und vermute dass ich noch viele Fehler eingebaut habe.


Meine Lösung sieht bis jetzt so aus(hoffe meine Schritte sind verständlich sonst einfach fragen).

#include<iostream>
#include<string>
using namespace std;

string Vorname, Nachname, Strasse, Ort, bestellte Ware;
int Hausnummer, Postleitzahl, Kreditkartennummer, KreditkartenGültigkeitsdatum;



struct Lieferanschrift 
{ 
  std::string Vorname; 
  std::string Nachname; 
  std::string Strasse; 
  int Hausnummer; 
  int Postleitzahl; 
  std::string Ort;  
}




struct Kreditkartendaten
{ int Kreditkartennummer;
  int KreditkartenGültigkeitsdatum; 
       }



enum land 
{ 
  Deutschland, Oesterreich, Schweiz, England, Frankreich 
}; 



int main() 
{ 


cout <<"Geben sie Ihre zu bestellende Ware ein" << endl;
cin >> bestellte Ware;



cout <<"Geben sie Ihren Vornamen ein" << endl;
cin >> Lieferanschrift.Vorname;

cout <<"Geben sie Ihren Nachnamen ein" << endl;
cin >> Lieferanschrift.Nachname;

cout <<"Geben sie Ihre Strasse ein" << endl;
cin >> Lieferanschrift.Strasse;

cout <<"Geben sie Ihre Hausnummer ein" << endl;
cin >> Lieferanschrift.Hausnummer;

cout <<"Geben sie Ihre Postleitzahl ein" << endl;
cin >> Lieferanschrift.Postleitzahl;

cout <<"Geben sie Ihren Ort ein" << endl;
cin >> Lieferanschrift.Ort;

cout <<"Geben sie Ihr Land ein" << endl;
cin >> land.Land;



cout <<"Geben sie Ihre Kreditkartennummer ein" << endl;
cin >> Kreditkartendaten.Kreditkartennummer;

cout <<"Geben sie Ihr Kredikarten Gültigkeitsdatum ein" << endl;
cin >> Kreditkartendaten.KreditkartenGültigkeitsdatum;


cout <<"Ihre Bestellung:" << Lieferanschrift << Kreditkartendaten << land << bestellte Ware <<endl;


}




Würde mich über schnelle Antworten freuen.


Grüße
silent12


----------



## bingo88 (4. Juli 2011)

struct blabla
{
...
}*; *// Semikolon fehltmain: return 0; fehlt (hatten wir doch schon mal...)

Die Länder-Enumeration soll sicherlich auch genutzt werden. Du könntest dafür z. B. ne Zahl abfragen (0 = D, 1 = CH, etc.) und dann auf das enum setzen

```
int cc; // "country code"
cout << "[0] Deutschland [1] Oesterreich" << ... << endl;
cin >> land;

land meinLand = land; // das geht nur wenn enum a) int ist und b) die Reihenfolge bei 0 beginnt und fortlaufen numeriert ist
// ansonsten
land meinLand = Deutschland;
switch (cc)
{
case 1:
    meinLand = Oesterreich;
    break;

case 2:
    meinLand = Schweiz;
    break;

...

default:
   // Fehler behandeln?
}
```


----------



## Triniter (5. Juli 2011)

Servus,
ich schreib dir mal ein paar Kommentare rein:


```
#include<iostream>
#include<string>
using namespace std;
 
[COLOR=lime][I]// Wieso initialisiert du hier Variablen die du nachher in der Struktur anlegst? Die Struktur dient dazu, dass das nicht erforderlich ist.
// Die Variable "bestellte Ware" ist so nicht zulässig und führt zu einem Fehler (Leerzeichen)[/I]string Vorname, Nachname, Strasse, Ort, bestellte Ware;
int Hausnummer, Postleitzahl, Kreditkartennummer, KreditkartenGültigkeitsdatum;
 
 
[I][COLOR=lime]// Das Semikolon nach der geschweiften Klammer wurde schon erwähnt, ich hängs hier jetzt dran.
//Ich bin mit C++ nicht mehr ganz so vertraut, aber du hast ja die Zeile using namespace std oben schon drin, muss man dann bei string trotzdem noch std:: voransetzten?[/I]
struct Lieferanschrift 
{ 
  std::string Vorname; 
  std::string Nachname; 
  std::string Strasse; 
  int Hausnummer; 
  int Postleitzahl; 
  std::string Ort;  
};
 
 
[COLOR=lime][I] 
// Semikolon[/I]struct Kreditkartendaten
{ int Kreditkartennummer;
  int KreditkartenGültigkeitsdatum; 
};
 
 
[I][COLOR=lime]// Passt soweit, nur sollte man zumindest den ersten Eintrag mit einer Zahl versehen, also z.B.
//enum land
//{
//    D=0, AUT, CH, GB, F
//};[/I]
enum land 
{ 
  Deutschland, Oesterreich, Schweiz, England, Frankreich 
}; 
 
[COLOR=lime][I]//Mir fehlt noch eine Struktur laut deiner Aufgabenbeschreibung, ließ mal nochmal genau nach.[/I] 
 
int main() 
{ 
 
 
cout <<"Geben sie Ihre zu bestellende Ware ein" << endl;
cin >> bestellte Ware;
 
 
 
cout <<"Geben sie Ihren Vornamen ein" << endl;
cin >> Lieferanschrift.Vorname;
 
cout <<"Geben sie Ihren Nachnamen ein" << endl;
cin >> Lieferanschrift.Nachname;
 
cout <<"Geben sie Ihre Strasse ein" << endl;
cin >> Lieferanschrift.Strasse;
 
cout <<"Geben sie Ihre Hausnummer ein" << endl;
cin >> Lieferanschrift.Hausnummer;
 
cout <<"Geben sie Ihre Postleitzahl ein" << endl;
cin >> Lieferanschrift.Postleitzahl;
 
cout <<"Geben sie Ihren Ort ein" << endl;
cin >> Lieferanschrift.Ort;
 
cout <<"Geben sie Ihr Land ein" << endl;
cin >> land.Land;
 
 
 
cout <<"Geben sie Ihre Kreditkartennummer ein" << endl;
cin >> Kreditkartendaten.Kreditkartennummer;
 
cout <<"Geben sie Ihr Kredikarten Gültigkeitsdatum ein" << endl;
cin >> Kreditkartendaten.KreditkartenGültigkeitsdatum;
 
 
cout <<"Ihre Bestellung:" << Lieferanschrift <<  Kreditkartendaten << land << bestellte Ware <<endl;
 
 
}
```
Zum Ein- und Ausgabeprogramm schreib ich jetzt erst mal nichts, versuch zuerst die Punkte die ich aufgeführt habe einzuarbeiten. Das Thema, dass du noch jeweils eine Variable vom Typ deiner Struktur benötigst ist vorhin ja auch schon angesprochen worden. Die fehlen auch noch.


----------



## Silent12 (5. Juli 2011)

Die Variablen am Anfang waren eig. dafür gedacht, dass ich ja noch die Variablen erstellen sollte. Aber wie füge ich jetzt "....jeweils eine Variable vom Typ meiner Struktur" ein ?


----------



## Fragile Heart (5. Juli 2011)

Na wie heißt denn deine Struktur?


----------



## Silent12 (5. Juli 2011)

soll ich einfach am Anfang die Variable Lieferanschrift und Kreditkartendaten erstellen (aber die sind dann ja int und string gemischt und von welchem Typ sind sie dann ?) ?

Grüße
silent12


----------



## Fragile Heart (5. Juli 2011)

Na vielleicht hab ich jetzt ein Schritt zu viel erwartet.  Machen wir es einfacher. 

Du hast bisher ja immer mit einfachen Variablen gearbeitet. int und String (wobei String eigentlich nichts einfaches mehr ist). Und wie heißt der Typ jetzt wenn du eine Struktur verwenden willst?


----------



## Silent12 (5. Juli 2011)

ganz normal struct ? was anderes kam in dem Tutorial noch nicht vor

Grüße
silent12


----------



## Fragile Heart (5. Juli 2011)

Nein, struct ist ja nur das Schlüsselwort um den Compiler zu sagen das es sich um einen Struktur handelt 


```
struct IchBinEineStruktur
{
...
```
wie heißt die Struktur?


----------



## Triniter (5. Juli 2011)

Mal ne blöde Frage, wo bekommst du die Aufgaben her? Hast du da ein Buch wo zuerst eine grobe Erklärung des Themas drin ist und dann die Aufgabe oder sonst irgendwo?


----------



## Silent12 (5. Juli 2011)

Highscore - Programmieren in C++: Einführung da kriege ich alles her  da steht echt nicht mehr dazu drin und wüsste auch nicht woher ich das dann wissen könnte sry


----------



## Fragile Heart (5. Juli 2011)

Mmh, Silent ... ich habe 2 Wörter geschrieben und wir wissen das eines davon ein Compiler Schlüsselwort ist oder? Welches der übergebliebene Wörte könnte dann wohl der Name sein?


----------



## Triniter (5. Juli 2011)

Naja ich denke mal schon, dass da einiges dazu drin steht, wenn du jetzt z.B. das Highscore - Programmieren in C++: Einführung - Strukturen durchließt müssten eigentlich die gröbsten Fragen beantwortet sein. Versuchs mal nochmals und stell deinen Vorschlag hier wieder ein.


----------



## Silent12 (5. Juli 2011)

kann ich dann einfach Lieferanschrift Eingabe 1;
eingeben um als Variable Eingabe 1 vom Datentyp Lieferanschrift zu speichern ?


----------



## Silent12 (5. Juli 2011)

So nun nochmal alles überarbeitet (danke für die Tipps --> nehme mir ab jetzt mehr Zeit dafür und mache nicht mehr so viel nebenher )

#include<iostream>
#include<string>
using namespace std;



struct Lieferanschrift 
{ 
  string Vorname; 
  string Nachname; 
  string Strasse; 
  int Hausnummer; 
  int Postleitzahl; 
  string Ort;  
};




struct Kreditkartendaten
{ int Kreditkartennummer;
  int KreditkartenGültigkeitsdatum; 
       };



enum land 
{ 
  Deutschland=0, Oesterreich, Schweiz, England, Frankreich 
}; 



int main() 
{ 

Kreditkartendaten MeineKreditkartendaten;
Lieferanschrift MeineLieferanschrift;
land MeinLand;
string bestellteWare;

cout <<"Geben sie Ihre zu bestellende Ware ein" << endl;
cin >> bestellteWare;



cout <<"Geben sie Ihren Vornamen ein" << endl;
cin >> MeineLieferanschrift.Vorname;

cout <<"Geben sie Ihren Nachnamen ein" << endl;
cin >> MeineLieferanschrift.Nachname;

cout <<"Geben sie Ihre Strasse ein" << endl;
cin >> MeineLieferanschrift.Strasse;

cout <<"Geben sie Ihre Hausnummer ein" << endl;
cin >> MeineLieferanschrift.Hausnummer;

cout <<"Geben sie Ihre Postleitzahl ein" << endl;
cin >> MeineLieferanschrift.Postleitzahl;

cout <<"Geben sie Ihren Ort ein" << endl;
cin >> MeineLieferanschrift.Ort;

cout <<"Geben sie Ihr Land ein" << endl;
cin >> MeinLand.land;



cout <<"Geben sie Ihre Kreditkartennummer ein" << endl;
cin >> MeineKreditkartendaten.Kreditkartennummer;

cout <<"Geben sie Ihr Kredikarten Gültigkeitsdatum ein" << endl;
cin >> MeineKreditkartendaten.KreditkartenGültigkeitsdatum;


cout <<"Ihre Bestellung:" << MeineLieferanschrift << MeineKreditkartendaten << MeinLand << bestellteWare <<endl;


}



Was habe ich noch übersehen ?


----------



## Triniter (5. Juli 2011)

Also wenn das deine Struktur ist:

```
struct Lieferanschrift 
{ 
       string Vorname; 
       string Nachname; 
       string Strasse; 
       int Hausnummer; 
       int Postleitzahl; 
       string Ort;  
};
```

Dann hast du ja einen Datentyp Lieferanschrift angelegt. Der belegt jetzt erst mal keinerlei Speicher sondern ist jetzt halt einfach mal definiert.
Jetzt willst du ihn benutzten. Dann ist der Vorgang zuerst einmal genau gleich wie wenn du z.B. ein int benutzten willst, du musst eine Variable initialisieren und das machst du exakt so wie du geschrieben hast:

```
Lieferanschrift Eingabe1;
```

Du hast jetzt eine Variable mit dem Namen Eingabe1 (du hast wieder den Fehler gemacht Eingabe 1 zu schreiben, in Variablen- und Funktionsnamen dürfen keine Leerzeichen vorkommen) angelegt.

Jetzt musst du dann entsprechend dem Struct Werte zuweisen, das habe ich in deinem ersten Beispiel schon gesehen machst du mit dem .-Operator. 

Mach einfach mal an deinem Beispiel weiter und poste es wieder hier dann gehen wir wieder durch.


----------



## Silent12 (5. Juli 2011)

Ja habe ich jetzt ja gepostet


----------



## Triniter (5. Juli 2011)

Das return 0 und einen Teil der Aufgabe, Zitat aus der Aufgabe: Die Bestellung wird ebenfalls in einer eigenen Struktur gespeichert, die sich der anderen beiden Strukturen bedient.

Außerdem wird es so wohl mit der Ausgabe nicht hinhauen, hast es es mal durch den Compiler geschickt?


----------



## Silent12 (5. Juli 2011)

also einfach im main teil noch return 0; einsetzen. Der meldet mir einen Fehler bei " int KreditkartenGültigkeitsdatum" was ich nicht verstehe. 




Verändert sähe es bis jetzt so aus:



#include<iostream>
#include<string>
using namespace std;



struct Lieferanschrift 
{ 
  string Vorname; 
  string Nachname; 
  string Strasse; 
  int Hausnummer; 
  int Postleitzahl; 
  string Ort;  
};


struct Bestellung
{  Lieferanschrift MeineLieferanschrift;
   land MeinLand;
   Kreditkartendaten MeineKreditkartendaten;
   string bestellteWare;
       }

struct Kreditkartendaten
{ int Kreditkartennummer;
  int KreditkartenGültigkeitsdatum; 
       };



enum land 
{ 
  Deutschland=0, Oesterreich, Schweiz, England, Frankreich 
}; 



int main() 
{ 

Kreditkartendaten MeineKreditkartendaten;
Lieferanschrift MeineLieferanschrift;
land MeinLand;
string bestellteWare;

cout <<"Geben sie Ihre zu bestellende Ware ein" << endl;
cin >> bestellteWare;



cout <<"Geben sie Ihren Vornamen ein" << endl;
cin >> MeineLieferanschrift.Vorname;

cout <<"Geben sie Ihren Nachnamen ein" << endl;
cin >> MeineLieferanschrift.Nachname;

cout <<"Geben sie Ihre Strasse ein" << endl;
cin >> MeineLieferanschrift.Strasse;

cout <<"Geben sie Ihre Hausnummer ein" << endl;
cin >> MeineLieferanschrift.Hausnummer;

cout <<"Geben sie Ihre Postleitzahl ein" << endl;
cin >> MeineLieferanschrift.Postleitzahl;

cout <<"Geben sie Ihren Ort ein" << endl;
cin >> MeineLieferanschrift.Ort;

cout <<"Geben sie Ihr Land ein" << endl;
cin >> MeinLand.land;



cout <<"Geben sie Ihre Kreditkartennummer ein" << endl;
cin >> MeineKreditkartendaten.Kreditkartennummer;

cout <<"Geben sie Ihr Kredikarten Gültigkeitsdatum ein" << endl;
cin >> MeineKreditkartendaten.KreditkartenGültigkeitsdatum;


cout <<"Ihre Bestellung:" << Bestellung <<endl;


}


----------



## Triniter (5. Juli 2011)

ü? 

Wobei, zugegeben, ich habe gerade festgestellt, dass VC++2010 sogar ä ö und ü zulässt. Vermeide die Buchstaben bitte trotzdem immer! Genauso wie ß.

Der Fehler liegt noch hier drin:

```
struct Bestellung
{  
    Lieferanschrift MeineLieferanschrift;
    Kreditkartendaten MeineKreditkartendaten;
[COLOR=red]    land MeinLand;    string bestellteWare;
}[COLOR=red];
```
Das Semikolon fehlt.

Sorry ich hab jetzt gerade einige male im Nebel herum geraten, jetzt hab ich noch was entdeckt: Das enum land muss vor dem struct Bestellung sein, andernfalls schlägt das Übersetzten fehl.


----------



## Silent12 (5. Juli 2011)

Alles angewandt aber mir wird noch ein Fehler bei Kreditkartendaten MeineKreditkartendaten; 
angezeigt.


----------



## Triniter (5. Juli 2011)

Poste es mal bitte wie es aktuell jetzt aussieht.


----------



## Silent12 (5. Juli 2011)

#include<iostream>
#include<string>
using namespace std;


struct Lieferanschrift 
{ 
  string Vorname; 
  string Nachname; 
  string Strasse; 
  int Hausnummer; 
  int Postleitzahl; 
  string Ort;  
};


    enum land 
{ 
  Deutschland=0, Oesterreich, Schweiz, England, Frankreich 
}; 


struct Bestellung
{  Lieferanschrift MeineLieferanschrift;
   land MeinLand;
   Kreditkartendaten MeineKreditkartendaten;
   string bestellteWare;
       };

struct Kreditkartendaten
{ int Kreditkartennummer;
  int KreditkartenGueltigkeitsdatum; 
       };







int main() 
{ 

Kreditkartendaten MeineKreditkartendaten;
Lieferanschrift MeineLieferanschrift;
land MeinLand;
string bestellteWare;

cout <<"Geben sie Ihre zu bestellende Ware ein" << endl;
cin >> bestellteWare;



cout <<"Geben sie Ihren Vornamen ein" << endl;
cin >> MeineLieferanschrift.Vorname;

cout <<"Geben sie Ihren Nachnamen ein" << endl;
cin >> MeineLieferanschrift.Nachname;

cout <<"Geben sie Ihre Strasse ein" << endl;
cin >> MeineLieferanschrift.Strasse;

cout <<"Geben sie Ihre Hausnummer ein" << endl;
cin >> MeineLieferanschrift.Hausnummer;

cout <<"Geben sie Ihre Postleitzahl ein" << endl;
cin >> MeineLieferanschrift.Postleitzahl;

cout <<"Geben sie Ihren Ort ein" << endl;
cin >> MeineLieferanschrift.Ort;

cout <<"Geben sie Ihr Land ein" << endl;
cin >> MeinLand.land;



cout <<"Geben sie Ihre Kreditkartennummer ein" << endl;
cin >> MeineKreditkartendaten.Kreditkartennummer;

cout <<"Geben sie Ihr Kredikarten Gültigkeitsdatum ein" << endl;
cin >> MeineKreditkartendaten.KreditkartenGueltigkeitsdatum;


cout <<"Ihre Bestellung:" << Bestellung <<endl;


}


----------



## fadade (5. Juli 2011)

das "struct Kreditkartennamen" würde ich persönlich *vor* die verwendung von "Kreditkartendaten MeineKreditkartendaten;" in "struct bestellung" schieben 
da du ja die Struktur _Kreditkartendaten _ja schon *in* der Struktur _Bestellung _verwendest. Da muss es dem Compiler also bekannt sein .... also so musste ich das früher machen^^


----------



## max00 (5. Juli 2011)

Hi Silent,
super Idee von dir, C zu lernen (das "++" lass ich dabei absichtlich noch weg ), aber eine Sache wurmt mich gerade (ein wenig):
Kopierst du den Quelltext hier immer direkt aus deinem Programm raus?
Wenn ja, dann würde ich mir gleich eine schöne Form (einrücken mit Tabstopps) angewöhnen - das hilft später enorm (und macht es auch alles übersichtlicher)!

Du kannst es dir ja eh ganz gut bei den Anderen hier abschauen!
Und den Thread hier werd ich auch versuchen weiter zu verfolgen.

Dann noch viel Glück und (vor allem) Spaß beim Programmieren,
max00


----------



## Silent12 (5. Juli 2011)

@fadade: Danke für den Tipp. Jetzt meckert der Compiler noch bei cin >> MeinLand.land;
@max00: Danke für die Tipps, aber warum lässt du absichtlich das "++" noch weg ? Nennt man es erst C++ wenn man bestimmte Dinge verwendet die es in C nicht gibt ? 

Grüße
silent12


----------



## AMD (5. Juli 2011)

Silent12 schrieb:


> @fadade: Danke für den Tipp. Jetzt meckert der Compiler noch bei cin >> MeinLand.land;
> @max00: Danke für die Tipps, aber warum lässt du absichtlich das "++" noch weg ? Nennt man es erst C++ wenn man bestimmte Dinge verwendet die es in C nicht gibt ?
> 
> Grüße
> silent12


 1. Pack doch das Land auch einfach in die Lieferanschrift. Verstehe gerade nicht warum du das nun über enum machen willst 
2. Weil du noch kein C++ machst. C++ ist halt vorallem OOP (objekt orrientierte programmierung) und da du hier vorallem mit struct etc. arbeitest und nicht mit Klassen+Methoden ist es eben nur C und kein C++.
Für den Anfang sicher nicht schlecht wenn man sich die ganzen Basics aneignet!


----------



## Triniter (6. Juli 2011)

Schau mal rein was ich dir gepostet habe, lass dich nicht von den geänderten Variablennamen stören aber so übersetzt es jetzt und die letzten beiden Schwierigkeiten sind auch drin:
Das enum kann leider nicht einfach mit 
	
	



```
cin >> MeinLand.land;
```
 eingegeben werden sondern muss, wie im Tutorial beschrieben werden erst einmal gecastet werden:

```
int main()
{
    //Hilfsvariable anlegen
    int Landcode;
    ...

     cout << endl << "Geben sie Ihr Land ein" << endl;
     cin >>  Landcode;

    myBestellung.myAdress.myLand = static_cast<Land>(Landcode);
    ...
}
```

Der nächste Punkt ist wieder einfacher zu verstehen: deine Ausgabe lautet ja nur 


```
cout <<"Ihre Bestellung:" << Bestellung <<endl;
```

Damit kann der Compiler nichts anfangen, korrekt musst du wieder jedes einzelne Element deiner structs von Hand aufrufen wie beim Einlesen, im Beispielcode von mir jetzt siehst du das für den Name, das muss dann halt analog für alle anderen Elemente auch gemacht werden.


```
#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

enum Land
{
    Deutschland=0, Oesterreich, Schweiz, England, Frankreich
};

struct Lieferanschrift
{
    string Vorname;
    string Nachname;
    string Strasse;
    int Hausnummer;
    int PLZ;
    string Ort;
    Land myLand;
};

struct Kreditkartendaten
{ 
    int CardNumber;
    int ValidDate;
};

struct Bestellung
{ 
    Lieferanschrift myAdress;
    Kreditkartendaten myCarddates;
    string bestellteWare;
};

int main(int argc, char *argv[])
{
    int Landcode;
    /* Initialisiere myBestellung aus struct Bestellung */
    Bestellung myBestellung;
    cout << "Geben sie Ihre zu bestellende Ware ein" << endl;
    cin >> myBestellung.bestellteWare;

    cout << endl << "Geben sie Ihren Vornamen ein" << endl;
    cin >> myBestellung.myAdress.Vorname;

    cout << endl << "Geben sie Ihren Nachnamen ein" << endl;
    cin >> myBestellung.myAdress.Nachname;

    cout << endl << "Geben sie Ihre Strasse ein" << endl;
    cin >> myBestellung.myAdress.Strasse;

    cout << endl <<"Geben sie Ihre Hausnummer ein" << endl;
    cin >> myBestellung.myAdress.Hausnummer;

    cout << endl << "Geben sie Ihre Postleitzahl ein" << endl;
    cin >> myBestellung.myAdress.PLZ;

    cout << endl << "Geben sie Ihren Ort ein" << endl;
    cin >> myBestellung.myAdress.Ort;

    cout << endl << "Geben sie Ihr Land ein" << endl;
    cin >>  Landcode;

    myBestellung.myAdress.myLand = static_cast<Land>(Landcode);

    cout << endl << "Geben sie Ihre Kreditkartennummer ein" << endl;
    cin >> myBestellung.myCarddates.CardNumber;

    cout << endl << "Geben sie Ihr Kredikarten Gueltigkeitsdatum ein" << endl;
    cin >> myBestellung.myCarddates.ValidDate;

    cout << endl << "Ihre Bestellung:" << endl;
    cout << "Name " << myBestellung.myAdress.Nachname << " " << myBestellung.myAdress.Vorname << endl;
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
```


----------



## Fragile Heart (6. Juli 2011)

AMD schrieb:


> 2. Weil du noch kein C++ machst. C++ ist halt vorallem OOP (objekt orrientierte programmierung) und *da du hier vorallem mit struct etc. arbeitest und nicht mit Klassen+Methoden* ist es eben nur C und kein C++.



Was unterscheidet eine Struktur von einer Klasse?  Technisch gesehen handelt es sich bei beiden um Datenstrukturen und Compiler unterscheiden diese beiden auch nur im verwendeten default Zugriffsmodus.


----------



## Silent12 (6. Juli 2011)

Das enum habe ich dabei weil in der Aufgabenstellung steht, dass ich Enumerationen auch benutzen soll.
Für was steht das 
int main(int argc, char *argv[])

?


----------



## Triniter (6. Juli 2011)

Versuchs mal mit dem Link hier: int main( int argc, char *argv[])

Vereinfacht gesagt, wenn du dein Programm aus der Konsole heraus startest oder wenn du in Windows auf eine .exe Datei auf Eigenschaften gehst kannst du Parameter anhängen, also z.B.
SpielxyStart.exe -Cheatmode -andererParameter Sowas gabs immer wieder mal, um damit irgend welche Cheatmodes oder Konsolen für Spiele zu aktivieren.
Das funktioniert in Main dann so:
Er erste Teil (int argc) ist ein Integer, also ein Ganzzahlwert welcher die Argumente zählt die im zweiten Teil (char *argv[]) übergeben werden. Das ganze ist jetzt für deinen Wissenstand noch etwas tricky weil da dann Zeiger und Arrays vorkommen, nimm es erst mal so hin. Für das Programm hier ist es jetzt eh uninteressant und bei mir ist es halt mit dran weil mir das sofort mitgeneriert wird wenn ich ein neues Projekt anlege und rauslöschen tu ich es dann auch nicht extra.


----------



## Silent12 (6. Juli 2011)

meldet mir einen Fehler bei (land MeinLand (struct Lieferungsanschrift) ) 

#include<iostream>
#include<string>
using namespace std;


struct Lieferanschrift 
{ 
  string Vorname; 
  string Nachname; 
  string Strasse; 
  int Hausnummer; 
  int Postleitzahl; 
  string Ort;  
  land MeinLand;
};


    enum land 
{ 
  Deutschland=0, Oesterreich, Schweiz, England, Frankreich 
}; 

struct Kreditkartendaten
{ int Kreditkartennummer;
  int KreditkartenGueltigkeitsdatum; 
       };


struct Bestellung
{  Lieferanschrift MeineLieferanschrift;
   Kreditkartendaten MeineKreditkartendaten;
   string bestellteWare;
       };









int main() 
{ 
Bestellung MeineBestellung;
Kreditkartendaten mycarddates;
Lieferanschrift MeineLieferanschrift;
int Landcode;



MeineBestellung.MeineLieferanschrift.MeinLand = static_cast<land>(Landcode);
string bestellteWare;

cout <<"Geben sie Ihre zu bestellende Ware ein" << endl;
cin >> MeineBestellung.bestellteWare;



cout <<"Geben sie Ihren Vornamen ein" << endl;
cin >> MeineBestellung.MeineLieferanschrift.Vorname;

cout <<"Geben sie Ihren Nachnamen ein" << endl;
cin >> MeineBestellung.MeineLieferanschrift.Nachname;

cout <<"Geben sie Ihre Strasse ein" << endl;
cin >> MeineBestellung.MeineLieferanschrift.Strasse;

cout <<"Geben sie Ihre Hausnummer ein" << endl;
cin >> MeineBestellung.MeineLieferanschrift.Hausnummer;

cout <<"Geben sie Ihre Postleitzahl ein" << endl;
cin >> MeineBestellung.MeineLieferanschrift.Postleitzahl;

cout <<"Geben sie Ihren Ort ein" << endl;
cin >> MeineBestellung.MeineLieferanschrift.Ort;

cout <<"Geben sie Ihr Land ein" << endl;
cin >> Landcode;



cout <<"Geben sie Ihre Kreditkartennummer ein" << endl;
cin >> MeineBestellung.mycarddates.Kreditkartennummer;

cout <<"Geben sie Ihr Kredikarten Gültigkeitsdatum ein" << endl;
cin >> MeineBestellung.mycarddates.KreditkartenGueltigkeitsdatum;


cout <<"Ihre Bestellung:" <<endl;
cout <<"Name:" << MeineBestellung.MeineLieferanschrift.Vorname << " " << MeineBestellung.MeineLieferanschrift.Nachname << endl;
cout <<"Adresse:" << MeineBestellung.MeineLieferanschrift.Strasse << " " << MeineBestellung.MeineLieferanschrift.Hausnummer <<" " << MeineBestellung.MeineLieferanschrift.Postleitzahl << " " << MeineBestellung.MeineLieferanschrift.Ort << " " <<  Landcode << endl;


}


----------



## <BaSh> (6. Juli 2011)

Bin mir nicht sicher aber ich glaube, dass er nicht eine später erfolgte definition aufrufen kann. Soll heißen : den struckt land vor den anderen stuckts deklarieren.


----------



## Triniter (6. Juli 2011)

Jo das enum land muss ganz nach vorne. C arbeitet das erst mal zeilenweise ab und kennt zu dem Zeitpunkt wo du das struct mit dem Element land MeinLand anlegst kennt er das enum land noch gar nicht.


----------



## Silent12 (6. Juli 2011)

Er führt es aus aber am Ende funktioniert die Eingabe der Kreditkartendaten nicht (Eingabeaufforderung kommt erst mit der Anzeige der anderen Eingaben (gesamte Bestellung) und man kann sie nicht mehr eingeben und statt dem eingegebenen land kommt eine zahl

Grüße
silent12


----------



## Triniter (6. Juli 2011)

Wie meinst? Beschreib mal genauer was du machst. Ich hab es so verstanden, du übersetzt das File und startest dann die exe und dann gibts irgendwann ein Problem oder?


----------



## Silent12 (6. Juli 2011)

Erst klicke ich auf compile and run dann öffnet sich der cmd-editor in dem ich die Eingaben mache (außer die  Kreditkartendaten) und am Ende kommen die fehlenden Eingabeaufforderungen der Kreditkarten und meine Bestellungsdaten, nur dass das Land als Zahl ausgegeben wird.


----------



## Triniter (6. Juli 2011)

OK langsam wirds dann bissle hässlicher, ich habe gesehen, du hast den Teil nicht drin wo der Cast für das enum gemacht wird:
cout << endl << "Geben sie Ihr Land ein" << endl;
cin >>  Landcode;

myBestellung.myAdress.myLand = static_cast<Land>(Landcode);

Aber jetzt wird es dann auf eine andere Art schwer: Du hast jetzt halt ein Schönwetterprogramm da stehen. Aber das funktioniert halt nur so lala. Also wenn z.B. anstelle einer Hausnummer 13 z.B. 13a schreibst wirds schon krachen. Da setzten jetzt so die Probleme eines solchen Tutorials ein, die zeigen die höchstens die Möglichkeiten aber nicht die techniken dahinter.


----------



## Silent12 (6. Juli 2011)

Aber das mit dem Land sieht für mich danach aus, dass die Eingabe als Zahl gespeichert wird und das mit den Kreditkartendaten muss ja auch an irgendwas liegen


----------



## Triniter (6. Juli 2011)

Häng mal nach jedem cin >> ...;
folgendes an:

```
if(cin.fail())
{
    cout << "Einlesen fehlgeschlagen" << endl;
}
```
Vielleicht siehst den Übeltäter dann schon.


----------



## Silent12 (6. Juli 2011)

Da wird mir 4mal Einlesen fehlgeschlagen angezeigt und die eingegebene Ware wird nicht ausgegeben


----------



## AMD (6. Juli 2011)

Fragile Heart schrieb:


> Was unterscheidet eine Struktur von einer Klasse?  Technisch gesehen handelt es sich bei beiden um Datenstrukturen und Compiler unterscheiden diese beiden auch nur im verwendeten default Zugriffsmodus.


 Naja^^
Klassen und Strukturen gleichsetzen würde ich jetzt eher nicht. Gibt schon teilweise ähnlichkeiten aber Klassen sind noch ein Stück komplexer... wenn ich schon an die Sachen mit Vererbung denke, also dann noch Kindklassen etc. oder Virtuelle Funktionen (oder eher Methoden)... da steckt schon ein Stück mehr dahinter als bei den Strukturen^^
Obwohl strukturiert natürlich nicht schlecht ist aber naja... wenn man das Themengebiet OOP richtig einsetzt hat das an manchen stellen schon feine Sachen.


----------



## bingo88 (6. Juli 2011)

In *C++* sind structs Klassen mit public-modifizierer als default. Man kann die auch Vererben.

```
struct Test
{
    Test();
    ~Test();
};

// ist gleich

class Test
{
public:
    Test();
    ~Test();
};
```

In C sieht die Sache natürlich anders aus, aber da gibt es ja eh keine Klassen


----------



## AMD (6. Juli 2011)

Ich wollte ja auch nur etwas nennen...
und wie siehts mit Virtuellen Sachen bei stuct aus? 

Man nimmt schon nicht umsonst Klassen bei C++ anstatt Strukturen.


----------



## bingo88 (6. Juli 2011)

Außer mit dem public/private gibt es keinerlei Unterschiede in C++. Es ist also vollkommen Wurst, ob du class oder struct nimmst, zumindest solange du alle Modifizierer hinschreibst.

Hier mal ein Artikel von IBM zu dem Thema.


----------



## AMD (6. Juli 2011)

... und warum hat man dann Klassen eingefügt wenn es deiner Meinung nach keinerlei Unterschied gibt 
Sieh es ein: Klassen haben einfach mal Vorteile gegenüber Strukturen - bei richtiger Nutzung.


----------



## bingo88 (6. Juli 2011)

Hast du den Artikel überhaupt gelesen? 



> Because the only difference between a structure and a class is that structure members have public access by default and class members have private access by default, you can use the keywords class or struct to define equivalent classes.


Du kannst ja auch

```
template <typename T>
```
oder

```
template <class T>
```
schreiben und es meint exakt dasselbe.


Hab das mal gerade getestet:

```
#include "stdafx.h"

struct TestA
{
    TestA() {}
    virtual ~TestA() {}

    virtual void func()
    {
        _tprintf(_T("TestA\n"));
    }
};

struct TestB : public TestA
{
    TestB() {}
    virtual ~TestB() {}

    virtual void func()
    {
        _tprintf(_T("TestB\n"));
    }
};

int _tmain(int argc, _TCHAR* argv[])
{
    TestA *ptrA = new TestA();
    TestA *ptrB = new TestB();

    ptrA->func();
    ptrB->func();

    delete ptrB;
    delete ptrA;

    return 0;
}
```
Ausgabe:
TestA
TestB

(mit VS2010)

Nochmal: Ich beziehe mich ausdrücklich auf C++. In C sind structs was ganz anderes!


----------



## Fragile Heart (7. Juli 2011)

AMD schrieb:


> ... und warum hat man dann Klassen eingefügt wenn es deiner Meinung nach keinerlei Unterschied gibt
> Sieh es ein: Klassen haben einfach mal Vorteile gegenüber Strukturen - bei richtiger Nutzung.


Ok, betrachten wir das mal einfach was genauer. 

Was ist denn eine Struktur? Ein Konstrukt (ich musst mich jetzt echt zusammen nehmen um nicht Objekt zu schreiben) das mehrere zusammenhängende Wert als logische Einheit speichern kann, oder?

Und was ist eine Klasse? Vereinfacht betrachtet ist es auch ein Konstrukt wie eine Struktur, nur das man hier noch die Funktionen mit dazu nimmt. Bezeichnet man dann als Objekt und hat den riesen Vorteil, dass man nicht nur die Eigenschaft sondern auch das Verhalten definieren kann.

Soweit, so gut. 

Nur wenn man sich jetzt mal ansieht was der Compiler daraus macht (dabei unterscheiden sich reine C Compiler gar nicht so sehr von den C++ Compilern), dann stellt man fest, dass es eigentlich keinen großen Unterschied gibt. Wie Bingo schon geschrieben hat, macht ein C++ bei Strukturen und Klassen das gleiche, bis auf den kleinen Unterschied mit den Zugriffmodifikator. Und da kannst du dich auf den Kopf stellen wie du willst, das ist einfach per definition so. 

Ein C Compiler macht sich das Leben sehr einfach und schreibt Datenfelder einfach schön hintereinander (unter zur Hilfenahme der Ausrichtungsgröße, die man bei x86 Maschine ja auch mal vergessen darf ohne das die Anwendung abschmiert). Was sich auf den ersten Moment wie ein riesen Unterschied anhört, stellt aber kein Problem da, da der C++ Compiler nichts anderes macht!  Auch hier werden einfach nur alle Variablen nacheinander aufgelistet (vtab, also die Tabelle mit den Virtuellen Funktionen ist auch nichts anderes als eine Variable wenn man es mal genau betrachtet). Die Funktionen einer Klasse stehen ja gar nicht im Objekt selber, sondern bekommen (in der einfachsten Version der Compiler Implementierung) einfach einen weiteren Parameter (das this objekt quasi) und gut ist.

Also technisch gesehen gibt es keinen Unterschied.


----------



## Triniter (7. Juli 2011)

Ich mach gerade ne große Integration und da treten immer wieder mehr oder weniger lustige Dinge auf:



			Dieser Inhalt steht nur eingeloggten Mitgliedern zur Verfügung.


----------



## Fragile Heart (7. Juli 2011)

Was meinst du jetzt? Die Bye Bye Meldung?


----------



## Triniter (7. Juli 2011)

Jo genau die.


----------



## Fragile Heart (7. Juli 2011)

Solche Meldungen gibt es aber sehr oft, ne nach Compiler/Entwicklungsumgebung kannst du auch die Schwelanzahl bestimmen, aber der abgebrochen werden soll.


----------



## Triniter (7. Juli 2011)

Jaja schon klar, meistens kommt aber nur eine Overflowmeldung, hier hat man sich wohl die Mühe gemacht den user wenigstens noch zu verabschieden.
Ansich ist es mir hier auf Arbeit wurscht wie viele Meldungen da kommen da ich normalerweise gleich sehe wo es hängt, sind ja dann meistens nur Folgefehler.


----------



## Silent12 (7. Juli 2011)

Hat noch jemand eine Idee zu den Problemen ?


----------



## max00 (7. Juli 2011)

Silent12 schrieb:


> Hat noch jemand eine Idee zu den Problemen ?



Kannst du mal bitte den Quelltext posten?


----------



## Silent12 (7. Juli 2011)

Ok:


#include<iostream>
#include<string>
using namespace std;

enum land 
{ 
  Deutschland=0, Oesterreich, Schweiz, England, Frankreich 
}; 


struct Lieferanschrift 
{ 
  string Vorname; 
  string Nachname; 
  string Strasse; 
  int Hausnummer; 
  int Postleitzahl; 
  string Ort;  
  land MeinLand;
};




struct Kreditkartendaten
{ int Kreditkartennummer;
  int KreditkartenGueltigkeitsdatum; 
       };


struct Bestellung
{  Lieferanschrift MeineLieferanschrift;
   Kreditkartendaten MeineKreditkartendaten;
   string bestellteWare;
       };









int main() 
{ 
Bestellung MeineBestellung;
Kreditkartendaten MeineKreditkartendaten;
Lieferanschrift MeineLieferanschrift;
int Landcode;



MeineBestellung.MeineLieferanschrift.MeinLand = static_cast<land>(Landcode);
string bestellteWare;

cout <<"Geben sie Ihre zu bestellende Ware ein" << endl;
cin >> MeineBestellung.bestellteWare;
if(cin.fail())
{
    cout << "Einlesen fehlgeschlagen" << endl;
}


cout <<"Geben sie Ihren Vornamen ein" << endl;
cin >> MeineBestellung.MeineLieferanschrift.Vorname;
if(cin.fail())
{
    cout << "Einlesen fehlgeschlagen" << endl;
}
cout <<"Geben sie Ihren Nachnamen ein" << endl;
cin >> MeineBestellung.MeineLieferanschrift.Nachname;
if(cin.fail())
{
    cout << "Einlesen fehlgeschlagen" << endl;
}
cout <<"Geben sie Ihre Strasse ein" << endl;
cin >> MeineBestellung.MeineLieferanschrift.Strasse;
if(cin.fail())
{
    cout << "Einlesen fehlgeschlagen" << endl;
}
cout <<"Geben sie Ihre Hausnummer ein" << endl;
cin >> MeineBestellung.MeineLieferanschrift.Hausnummer;
if(cin.fail())
{
    cout << "Einlesen fehlgeschlagen" << endl;
}
cout <<"Geben sie Ihre Postleitzahl ein" << endl;
cin >> MeineBestellung.MeineLieferanschrift.Postleitzahl;
if(cin.fail())
{
    cout << "Einlesen fehlgeschlagen" << endl;
}
cout <<"Geben sie Ihren Ort ein" << endl;
cin >> MeineBestellung.MeineLieferanschrift.Ort;
if(cin.fail())
{
    cout << "Einlesen fehlgeschlagen" << endl;
}
cout <<"Geben sie Ihr Land ein" << endl;
cin >> Landcode;
if(cin.fail())
{
    cout << "Einlesen fehlgeschlagen" << endl;
}
if(cin.fail())
{
    cout << "Einlesen fehlgeschlagen" << endl;
}


cout <<"Geben sie Ihre Kreditkartennummer ein" << endl;
cin >> MeineBestellung.MeineKreditkartendaten.Kreditkartennummer;
if(cin.fail())
{
    cout << "Einlesen fehlgeschlagen" << endl;
}

cout <<"Geben sie Ihr Kredikarten Gültigkeitsdatum ein" << endl;
cin >> MeineBestellung.MeineKreditkartendaten.KreditkartenGueltigkeitsdatum;
if(cin.fail())
{
    cout << "Einlesen fehlgeschlagen" << endl;
}

cout <<"Ihre Bestellung:" <<endl;
cout <<"Name:" << MeineBestellung.MeineLieferanschrift.Vorname << " " << MeineBestellung.MeineLieferanschrift.Nachname << endl;
cout <<"Adresse:" << MeineBestellung.MeineLieferanschrift.Strasse << " " << MeineBestellung.MeineLieferanschrift.Hausnummer <<" " << MeineBestellung.MeineLieferanschrift.Postleitzahl << " " << MeineBestellung.MeineLieferanschrift.Ort << " " <<  Landcode << endl;
cout <<"Kreditkartendaten:" << MeineBestellung.MeineKreditkartendaten.Kreditkartennummer <<" "<< MeineBestellung.MeineKreditkartendaten.KreditkartenGueltigkeitsdatum << endl;
system("Pause");
}


----------



## AMD (7. Juli 2011)

Fragile Heart schrieb:


> Ok, betrachten wir das mal einfach was genauer.
> 
> Was ist denn eine Struktur? Ein Konstrukt (ich musst mich jetzt echt zusammen nehmen um nicht Objekt zu schreiben) das mehrere zusammenhängende Wert als logische Einheit speichern kann, oder?
> 
> ...


 Ok das akzeptiere ich! 
Aber warum nimmt man dann bei C++ trotzdem eher Klassen als Strukturen?


----------



## bingo88 (8. Juli 2011)

Also das hier sagt              Bjarne Stroustrup (der Entwickler von C++) zu dem Thema (The Design and Evolution of C++):


> At this point, the object model becomes real in the sense  that an object is more than the simple aggregation fo the data members  of a class.  An object of a C++ class with a virtual function is a  fundamentally different beast from a simple C `struct`.  Then why did I  not at this point choose to make structs and classes different notions?
> My intent was to have a single concept:  a single set of layout  rules, a single set of lookup rules, a single set of resolution rules,  etc...  I was convinced that if `struct` came to mean "C and  compatibility" to users and `class` came to mean "C++ and advanced  features," the community would fall into two distinct camps that would  soon stop communicating.  Beingn able to use as many or as few language  features as needed when designing a class was an important idea to me.   Only a single concept would support my ideas of a smooth and gradual  transition from "traditional C-style programming," through class  abstraction, to object-oriented programming.  Only a single concept  would support this notion of "you only pay for what you use" ideal.​


Ich meine mich auch zu erinnern, mein Chef hatte mir mal erzählt, dass als sie damals mit C++ angefangen haben, gab es das class Keyword noch garnicht, sondern nur struct.


----------



## Fragile Heart (8. Juli 2011)

AMD schrieb:


> Aber warum nimmt man dann bei C++ trotzdem eher Klassen als Strukturen?


Weil es in allen Lehrbüchern steht, eine neue Bezeichnung ja auch nicht so schlecht ist und ins Konzept passt? 

Und weil die wenigsten sich mit den System jemals genau beschäftigen.


----------



## max00 (8. Juli 2011)

Hey Silent - ich habe eine Lösung gefunden:
du musst in der abfrage auf cin.fail() noch folgendes einfügen:
cin.clear();
cin.ignore();

also statt:

```
if(cin.fail())
{
    cout << "Einlesen fehlgeschlagen" << endl;
}
```


```
if(cin.fail())
{
    cin.clear();
    cin.ignore();
    cout << "Einlesen fehlgeschlagen" << endl;
}
```
Das löscht dir dann das Fehlerbit und die nächsten Abfragen funktionieren wieder!

Außerdem würd ich die ganze Abfrage in eine kleine Schleife packen:

```
int eingabe;

cout<<"Bitte eine Zahl eingeben:\n";
cin >> eingabe;
while(cin.fail() )
{
    cin.clear();
    cin.ignore();
    cout<<"Keine Zahl!\nBitte erneut eingeben:\n";
    cin>>eingabe;
}
```
Somit hast du dann am Ende immer eine gültige Eingabe 

mfg max00

EDIT: Und die Zeile:

```
MeineBestellung.MeineLieferanschrift.MeinLand = static_cast<land>(Landcode);
```
gehört nach dem Einlesen von "Landcode" eingefügt!


----------



## Silent12 (9. Juli 2011)

Nach dem einlesen ? Wo muss ich da etwas ändern ? 
Thx für die andere Antwort, aber das ändert immer noch nichts daran, dass die Kreditkartendaten nicht abgefragt werden.
Trotzdem danke.


Grüße
silent12


----------



## max00 (9. Juli 2011)

Interessant, bei mir werden die Kreditkartendaten normal abgefragt - auch mit dem Quelltext den du gepostet hast...


----------



## Silent12 (16. Juli 2011)

Also so sieht es jetzt bei mir aus. Hast du auch genau das eingegeben ? 




#include<iostream>
#include<string>
using namespace std;

enum land 
{ 
  Deutschland=0, Oesterreich, Schweiz, England, Frankreich 
}; 


struct Lieferanschrift 
{ 
  string Vorname; 
  string Nachname; 
  string Strasse; 
  int Hausnummer; 
  int Postleitzahl; 
  string Ort;  
  land MeinLand;
};




struct Kreditkartendaten
{ int Kreditkartennummer;
  int KreditkartenGueltigkeitsdatum; 
       };


struct Bestellung
{  Lieferanschrift MeineLieferanschrift;
   Kreditkartendaten MeineKreditkartendaten;
   string bestellteWare;
       };









int main() 
{ 
Bestellung MeineBestellung;
Kreditkartendaten MeineKreditkartendaten;
Lieferanschrift MeineLieferanschrift;
int Landcode;



MeineBestellung.MeineLieferanschrift.MeinLand = static_cast<land>(Landcode);
string bestellteWare;

cout <<"Geben sie Ihre zu bestellende Ware ein" << endl;
cin >> MeineBestellung.bestellteWare;
if(cin.fail())
{
    cin.clear();
    cin.ignore();
    cout << "Einlesen fehlgeschlagen" << endl;
}


cout <<"Geben sie Ihren Vornamen ein" << endl;
cin >> MeineBestellung.MeineLieferanschrift.Vorname;
if(cin.fail())
{cin.clear();
    cin.ignore();
    cout << "Einlesen fehlgeschlagen" << endl;
}
cout <<"Geben sie Ihren Nachnamen ein" << endl;
cin >> MeineBestellung.MeineLieferanschrift.Nachname;
if(cin.fail())
{cin.clear();
    cin.ignore();
    cout << "Einlesen fehlgeschlagen" << endl;
}
cout <<"Geben sie Ihre Strasse ein" << endl;
cin >> MeineBestellung.MeineLieferanschrift.Strasse;
if(cin.fail())
{cin.clear();
    cin.ignore();
    cout << "Einlesen fehlgeschlagen" << endl;
}
cout <<"Geben sie Ihre Hausnummer ein" << endl;
cin >> MeineBestellung.MeineLieferanschrift.Hausnummer;
if(cin.fail())
{cin.clear();
    cin.ignore();
    cout << "Einlesen fehlgeschlagen" << endl;
}
cout <<"Geben sie Ihre Postleitzahl ein" << endl;
cin >> MeineBestellung.MeineLieferanschrift.Postleitzahl;
if(cin.fail())
{cin.clear();
    cin.ignore();
    cout << "Einlesen fehlgeschlagen" << endl;
}
cout <<"Geben sie Ihren Ort ein" << endl;
cin >> MeineBestellung.MeineLieferanschrift.Ort;
if(cin.fail())
{cin.clear();
    cin.ignore();
    cout << "Einlesen fehlgeschlagen" << endl;
}
cout <<"Geben sie Ihr Land ein" << endl;
cin >> Landcode;
if(cin.fail())
{cin.clear();
    cin.ignore();
    cout << "Einlesen fehlgeschlagen" << endl;
}
if(cin.fail())
{cin.clear();
    cin.ignore();
    cout << "Einlesen fehlgeschlagen" << endl;
}


cout <<"Geben sie Ihre Kreditkartennummer ein" << endl;
cin >> MeineBestellung.MeineKreditkartendaten.Kreditkartennummer;
if(cin.fail())
{cin.clear();
    cin.ignore();
    cout << "Einlesen fehlgeschlagen" << endl;
}

cout <<"Geben sie Ihr Kredikarten Gültigkeitsdatum ein" << endl;
cin >> MeineBestellung.MeineKreditkartendaten.KreditkartenGueltigkeitsdatum;
if(cin.fail())
{cin.clear();
    cin.ignore();
    cout << "Einlesen fehlgeschlagen" << endl;
}

cout <<"Ihre Bestellung:" <<endl;
cout <<"Name:" << MeineBestellung.MeineLieferanschrift.Vorname << " " << MeineBestellung.MeineLieferanschrift.Nachname << endl;
cout <<"Adresse:" << MeineBestellung.MeineLieferanschrift.Strasse << " " << MeineBestellung.MeineLieferanschrift.Hausnummer <<" " << MeineBestellung.MeineLieferanschrift.Postleitzahl << " " << MeineBestellung.MeineLieferanschrift.Ort << " " <<  Landcode << endl;
cout <<"Kreditkartendaten:" << MeineBestellung.MeineKreditkartendaten.Kreditkartennummer <<" "<< MeineBestellung.MeineKreditkartendaten.KreditkartenGueltigkeitsdatum << endl;
system("Pause");
}


Grüße
silent12


----------



## Silent12 (18. Juli 2011)

Erkennt noch jemand einen Fehler sonst müsste ich das Kapitel halt überspringen :-/


----------



## bingo88 (18. Juli 2011)

Bei mir kompiliert das (VS2008). Ich musste allerdings die Leerzeichen aus solchen Dingen entfernen:

```
MeineBestellung.MeineKreditkartendaten.Kreditkart[B]e  n[/B]nummer
```
also

```
MeineBestellung.MeineKreditkartendaten.Kreditkart[B]en[/B]nummer
```


----------



## Silent12 (18. Juli 2011)

Ok zumindest habe ich die Funktionsweise kapiert. Nun bin ich beim Thema "Zeiger" angekommen.

Meine Aufgabe:
Erstellen Sie eine C++-Anwendung, in der Sie dynamisch ein eindimensionales Array vom Typ short  erstellen. Der Anwender Ihres Programms soll angeben können, aus wie  vielen Elementen das Array bestehen soll. Legen Sie abwechselnd in alle  Elemente des Arrays die Zahlen 0 und 1 hinein und geben Sie danach den  Inhalt des Arrays auf den Bildschirm aus.

Mein Anfang sieht so aus:

#include <string> 
#include <iostream> 

short Array_;

int main() 
{ 
  int i; 

  cout << "Wie viele Array-Elemente moechten Sie speichern? " <<flush; 
  cin >> i; 

  Array* arrays = new Array; 

  for (int b = 0; b < i; ++b) 
  { .......


Nun meine Frage: Wie und was genau muss ich in der Klammer nun bestimmen ? 


Grüße
silent12_


----------

