Hallo, habe vor kurzen mit Programmieren angefangen. Begonnen habe ich mit der Sprache c++. Nun hängt es an einem 2D-array, obwohl ich dachte, dass ich das schon begriffen hätte. Also schätze ich muss es ein einfacher anfänger-/denk-fehler sein. Folgender Code ist das Problem: #include <iostream> #include <cstdio> # include <string> #include <conio.h> #include <dos.h> using namespace std; int main() { int feld[3][3]; feld[0][3]=3; feld[1][0]=1; cout<<feld[0][3]; system("PAUSE"); cin.clear(); cin.ignore(cin.rdbuf()->in_avail()); cin.get(); return 0; } Er gibt mir dann "1" aus. Wenn ich // vor feld[1][0]=1; schreibe gibt er mir "3" aus. Diesen Zusammenhang verstehe ich nicht. Danke für eure Hilfe
anfänger schrieb: > int feld[3][3]; > feld[0][3]=3; Du verwendest ein Array mit drei Elementen, greifst aber auf das vierte Element zu. Das erste Element ist nicht [1], sondern [0].
anfänger schrieb: > int feld[3][3]; > feld[0][3]=3; Wie groß ist feld? Welches ist daraus folgend der kleinste und der größte Index?
ah ok. da war der fehler. danke. hatte irgendwie im kopf feld[3][3] wäre jeweils von 0-3 aber heißt ja 0-2^^. danke
Davon abgesehen wäre es sinnvoll sich zunächst auf den Standard zu konzentrieren. Das heißt die "conio.h" und "dos.h" wegzulassen. Wenn du dann noch alles in der Konsole machst, dann brauchst du auch deinen "system("PAUSE");"-Befehl nicht mehr. Desweiteren solltest du dir bewusst sein, dass C und C++ unterschiedliche Sprachen sind. Du bindest nämlich eine aus der C-Welt kommende Header-Datei ein ("cstdio") die für C++ "angepasst" wurde. Zuguterletzt: wenn du Quellcode postest, solltest du entsprechende Tags nutzen um die Lesbarkeit zu erhöhen. Gruß Dennis
Okay. danke. wo wir gerade dabei sind - bei Funktionen verstehe ich das nicht mit den globalen variablen. Ich bekomme da eine Fehlermeldung bei cout<<feld[i][o]<<" "; da ich feld dort noch nicht definiert habe. ich meine aus dem informatikuntericht von vor ein paar Jahren, dass man sowas mit public int löst oder so. aber hier bekomme ich das nicht auf die kette. und wenn ich mir videos/tutorials zu funktionen angucke geht es nie um int's oder arrays die von einer anderen funktion ausgegeben werden sollen. danke für eure hilfe
1 | #include <iostream> |
2 | # include <string> |
3 | using namespace std; |
4 | int erzeugen() |
5 | { |
6 | for(int i =0;i<=3;i++) |
7 | { |
8 | for (int o=0;o<=3;o++) |
9 | { |
10 | cout<<feld[i][o]<<" "; |
11 | } |
12 | cout<<"\n"; |
13 | |
14 | } |
15 | int main() |
16 | { |
17 | public int feld[4][4]; |
18 | feld[0][0]=0; |
19 | feld[0][1]=1; |
20 | feld[0][2]=2; |
21 | feld[0][3]=3; |
22 | feld[1][0]=1; |
23 | feld[1][1]=0; |
24 | feld[1][2]=0; |
25 | feld[1][3]=0; |
26 | feld[2][0]=2; |
27 | feld[2][1]=0; |
28 | feld[2][2]=0; |
29 | feld[2][3]=0; |
30 | feld[3][0]=3; |
31 | feld[3][1]=0; |
32 | feld[3][2]=0; |
33 | feld[3][3]=0; |
34 | erzeugen(); |
35 | |
36 | cout<<"\n\n\n\n\n\n"<<endl; |
37 | cin.clear(); |
38 | cin.ignore(cin.rdbuf()->in_avail()); |
39 | cin.get(); |
40 | return 0; |
41 | } |
C/++ ist nicht die einfachste Sprache um "anzufangen". An einem guten Buch wirst du kaum drum herum kommen. Zu deinem Problem: "feld" ist eine lokale Variable, auf die nur im lokalen Kontext zugegriffen werden kann; also hier nur in main(). Damit die Funktion "erzeugen" darauf zugreifen kann, mußt du das Feld an die Funktion übergeben. Das geht grundsätzlich entweder "by-value" oder "by-reference". Arrays sind ein doppelter Sonderfall. Da geht es nur "by-reference" (was du hier aber sowieso brauchst). Und um die Feld-Größe zu übergeben, braucht es eine "spezielle" Syntax:
1 | #include <iostream> |
2 | #include <string> |
3 | |
4 | using namespace std; |
5 | |
6 | void erzeugen(int (*feld)[4][4]) |
7 | {
|
8 | for (int i=0;i<=3;i++) |
9 | {
|
10 | for (int o=0;o<=3;o++) |
11 | {
|
12 | cout<<(*feld)[i][o]<<" "; |
13 | }
|
14 | cout<<"\n"; |
15 | }
|
16 | }
|
17 | int main() |
18 | {
|
19 | int feld[4][4]; |
20 | feld[0][0]=0; |
21 | feld[0][1]=1; |
22 | feld[0][2]=2; |
23 | feld[0][3]=3; |
24 | feld[1][0]=1; |
25 | feld[1][1]=0; |
26 | feld[1][2]=0; |
27 | feld[1][3]=0; |
28 | feld[2][0]=2; |
29 | feld[2][1]=0; |
30 | feld[2][2]=0; |
31 | feld[2][3]=0; |
32 | feld[3][0]=3; |
33 | feld[3][1]=0; |
34 | feld[3][2]=0; |
35 | feld[3][3]=0; |
36 | erzeugen(&feld); |
37 | |
38 | cout<<"\n\n\n\n\n\n"<<endl; |
39 | cin.clear(); |
40 | cin.ignore(cin.rdbuf()->in_avail()); |
41 | cin.get(); |
42 | return 0; |
43 | }
|
Alternativ deklariest du "feld" global bevor es irgendwo benutzt wird. Globale Definitionen sollten allerdings mit Bedacht eingesetzt werden, da sie zu schwer wartbaren Code führen können.
1 | #include <iostream> |
2 | #include <string> |
3 | |
4 | using namespace std; |
5 | |
6 | int feld[4][4]; |
7 | |
8 | void erzeugen() |
9 | {
|
10 | for (int i=0;i<=3;i++) |
11 | {
|
12 | for (int o=0;o<=3;o++) |
13 | {
|
14 | cout<<feld[i][o]<<" "; |
15 | }
|
16 | cout<<"\n"; |
17 | }
|
18 | }
|
19 | int main() |
20 | {
|
21 | feld[0][0]=0; |
22 | feld[0][1]=1; |
23 | feld[0][2]=2; |
24 | feld[0][3]=3; |
25 | feld[1][0]=1; |
26 | feld[1][1]=0; |
27 | feld[1][2]=0; |
28 | feld[1][3]=0; |
29 | feld[2][0]=2; |
30 | feld[2][1]=0; |
31 | feld[2][2]=0; |
32 | feld[2][3]=0; |
33 | feld[3][0]=3; |
34 | feld[3][1]=0; |
35 | feld[3][2]=0; |
36 | feld[3][3]=0; |
37 | erzeugen(); |
38 | |
39 | cout<<"\n\n\n\n\n\n"<<endl; |
40 | cin.clear(); |
41 | cin.ignore(cin.rdbuf()->in_avail()); |
42 | cin.get(); |
43 | return 0; |
44 | }
|
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.