[Novize][gelöst] cin array Problem !
-
Hey Leute,
Ich hänge hier vor 'nem Problem was ich leider nicht ausfindig machen kann.
#include <iostream> #include <windows.h> using namespace std; void setField(); char TAB = 9; int main() { int height = 10; int width = 20; char field[width][height]; int i = 0; int j = 0; int k = 0; int g = 0; for(i = 0; i < height; i++){ cout << TAB << TAB << TAB << TAB; for(j = 0; j < width; j++){ field[i][j] = 'O'; } cout << endl; } for(;k < height;){ system("cls"); for(i = 0; i < height; i++){ cout << TAB << TAB << TAB << TAB; for(j = 0; j < width; j++){ cout << field[i][j]; } cout << endl; } cout << endl; cout << "field[" << k << "][" << g << "] = "; cin >> field[k][g]; if(g == width){ g = 0; k++; } g++; } /* for(i = 0; i < height; i++){ cout << TAB << TAB << TAB << TAB; for(j = 0; j < width; j++){ field[i][j] = 'x'; cout << field[i][j]; } cout << endl; } */ cout << endl; system("Pause"); }
Habe bis zum array field[0][12] die Eingabe "x" verwendet.
Der Sinn des Programmes soll erstmal sein ein Feld zu zeichnen - wobei das Ganze von oben nach unten gefüllt werden soll.
Problematik liegt ab field[0][10] daran das gleichzeitig field[1][0] mitgefüllt wird - ich habe die Ausgabe des Feldes seperat ausgeben lassen um zu sehen welche array Elemente da ausgegeben werden - wie gewollt wird dort nacheinander alles ausgegeben.D.h der Fehler muss in der Eingabe der Elementwerte nach dem for loop für die Ausgabe liegen.
Mein Code gibt folgendes Programm aus:
xxxxxxxxxxxxOOOOOOOO xxOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOO field[0][12] =
Danke schonmal für jegliche Hilfe !
gruß Charlie
-
Du bist lernresistent. Siehe:
http://www.c-plusplus.net/forum/p2363728#2363728
-
Belli schrieb:
Du bist lernresistent. Siehe:
http://www.c-plusplus.net/forum/p2363728#2363728Wo liegt denn hier das Problem? Wollt' ihr mich auf eine Suchfunktion verweisen? Wenn ja dann bitte ich um ein Stichwort - denn ich habe keine Ahnung wie mein Problem beschrieben werden soll?
gruß Charlie
-
Falke88 schrieb:
Wo liegt denn hier das Problem?
Du schreibst:
"Der Sinn des Programmes soll erstmal sein ein Feld zu zeichnen"Genau darum ging es doch in Deinem von mir zitierten Thread auch schon ...
-
Falke88 schrieb:
Hey Leute,
Ich hänge hier vor 'nem Problem was ich leider nicht ausfindig machen kann.Visual-Studio 2010 komiliert das garnicht erst.
..\feldtest.cpp(15): error C2057: Konstanter Ausdruck erwartet ..\feldtest.cpp(15): error C2466: Zuordnung eines Arrays der konstanten Größe 0 nicht möglich. ..\feldtest.cpp(15): error C2057: Konstanter Ausdruck erwartet ..\feldtest.cpp(15): error C2466: Zuordnung eines Arrays der konstanten Größe 0 nicht möglich. ..\feldtest.cpp(15): error C2087: 'field': Feldindex fehlt ..\feldtest.cpp(15): error C2133: 'field': Unbekannte Größe
Mit folgender Änderung kompiliert es:
const int height = 10; const int width = 20; char field[width][height];
Welcher Compiler akzeptiert variable statische Arraygrössen ?
Wenn man nun als erste Eingabe folgendes eingibt
field[0][3] = 123
ergibt das
123OOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOO
Soll das so sein ?
Noch ein Hinweis: Felder fangen bei 0 an und Höhe und breite lassen
sich nicht beliebig tauschen.Somit wäre z.B. sowas falsch!
for(j = 0; j < width; j++){ cout << field[i][j];
-
merano schrieb:
Welcher Compiler akzeptiert variable statische Arraygrössen ?
Das ist der GCC, wenn man ihn nicht anweist, streng nach ISO-Standard zu handeln. Dann akzeptiert er VLAs wie aus C99.
-
merano schrieb:
Falke88 schrieb:
Hey Leute,
Ich hänge hier vor 'nem Problem was ich leider nicht ausfindig machen kann.Visual-Studio 2010 komiliert das garnicht erst.
..\feldtest.cpp(15): error C2057: Konstanter Ausdruck erwartet ..\feldtest.cpp(15): error C2466: Zuordnung eines Arrays der konstanten Größe 0 nicht möglich. ..\feldtest.cpp(15): error C2057: Konstanter Ausdruck erwartet ..\feldtest.cpp(15): error C2466: Zuordnung eines Arrays der konstanten Größe 0 nicht möglich. ..\feldtest.cpp(15): error C2087: 'field': Feldindex fehlt ..\feldtest.cpp(15): error C2133: 'field': Unbekannte Größe
Mit folgender Änderung kompiliert es:
const int height = 10; const int width = 20; char field[width][height];
Welcher Compiler akzeptiert variable statische Arraygrössen ?
Wenn man nun als erste Eingabe folgendes eingibt
field[0][3] = 123
ergibt das
123OOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOO
Soll das so sein ?
Noch ein Hinweis: Felder fangen bei 0 an und Höhe und breite lassen
sich nicht beliebig tauschen.Somit wäre z.B. sowas falsch!
for(j = 0; j < width; j++){ cout << field[i][j];
Ja das soll so sein:
123456789ABMNOPQRSTK BMNOPQRSTKLOOOOOOOOO LOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOO field[1][9] =
Das passiert aber wenn du das Ganze weiterführen würdest - siehe die 2. Zeile welche B Simultan übernimmt anstatt bei [1][0] mit "L" weiterzumachen wie es logisch und eigentlich auch gewollt ist.
@ Elli
Mein Thread damals bezog sich auf den ReDraw des Feldes - das habe ich ja mit system("cls") gelöst - mit den Threads die Ihr mir gelinkt habt konnte ich leider nichts anfangen.
Edit: Danke @ merano - der Wink mit dem Verwechseln hat den Fehler aufgeworfen - nun klappts !!
gruß Charlie
-
SeppJ schrieb:
merano schrieb:
Welcher Compiler akzeptiert variable statische Arraygrössen ?
Das ist der GCC, wenn man ihn nicht anweist, streng nach ISO-Standard zu handeln. Dann akzeptiert er VLAs wie aus C99.
Danke für den Hinweis.
Manchmal könnte das ja recht nützlich sein.
The New C: Why Variable Length Arrays
http://www.drdobbs.com/the-new-cwhy-variable-length-arrays/184401444Kann man Visula-Studio auch dazu "überreden" ?
Fakt ist wohl, das man sich zwischen C und C++ entscheiden sollte.
There is no support for VLAs in VS. MS suggest you use the C++ mode of the compiler, with std::vector as a replacement for VLAs.