[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#2363728

    Wo 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];
    

  • Mod

    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/184401444

    Kann 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.


Log in to reply