Pointer und Felder



  • Ich hab folgenden code geschrieben:

    #include <iostream>
    using namespace std;
    #define for if(false);else for
    
    void test(short *test);
    
    int main()
    {
    	short Reihe = 0, Spalte = 0;
    	short Feld[3][3];
    
    	for(short i=0;i<=2;i++)
    		for(short j=0;j<=2;j++)
    			Feld[i][j] = 0;
    	test(*Feld);;
    	cout << "Gib bitte die Reihe an:";
    	cin >> Reihe;
    	cout << "Gib bitte die Spalte an:";
    	cin >> Spalte;
    	Feld[Reihe][Spalte] = 1;
    	test(*Feld);
    
    	return 1;
    }
    
    void test(short *test)
    {
    	for(short i = 0; i<=2; i++)
    	cout << *test++  << '\t' << *test++ << '\t' << *test++ << '\n';
    
    }
    

    und wenn ich jetzt für die Reihe 1 und für die Spalte 2 eingebe kommt
    0 0 0
    1 0 0
    0 0 0

    anstatt

    0 0 0
    0 0 1
    0 0 0

    und ich kann mir nicht erklähren wieso 😕 😕 😕

    .



  • Beim Return von main soll natürlich

    return 0;
    

    stehen



  • das liegt an deiner Ausgabe Funktion.

    btw. solltest du auch auf const correctness achten

    http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=constcor#Answ



  • Wenn ich das jetzt mit const schreib also so:

    #include <iostream>
    using namespace std;
    #define for if(false);else for
    
    void test(const short *test);
    
    int main()
    {
    	short Reihe = 0, Spalte = 0;
    	short Feld[3][3];
    
    	for(short i=0;i<=2;i++)
    		for(short j=0;j<=2;j++)
    			Feld[i][j] = 0;
    	test(*Feld);;
    	cout << "Gib bitte die Reihe an:";
    	cin >> Reihe;
    	cout << "Gib bitte die Spalte an:";
    	cin >> Spalte;
    	Feld[Reihe][Spalte] = 1;
    	test(*Feld);
    
    	return 0;
    }
    
    void test(const short *test)
    {
    	for(short i = 0; i<=2; i++)
    	cout << *test++  << '\t' << *test++ << '\t' << *test++ << '\n';
    
    }
    

    kommt immer noch das gleiche raus



  • Abgesehen von der oben erfolgten Syntaxkorrektur
    versuch mal folgendes

    void test(short *test) 
    { 
        for(short i = 0; i<=2; i++)
         {
          for(short j=0; j<3; j++) 
           {
           printf("[%1.1i,%1.1i] %1.1i\t",i,j,test[i][j]);
           }
          printf("\n");
         }
    return;
    }
    

    Das ist zwar 🕶 archaisches C 🕶 man hat aber jetzt den Vorteil das man die Indices genuer sieht die ausgegeben werden.
    Stimmts hier hat cout ein Problem, stimmts hier auch nicht hat deine Eingabe ein Problem

    P.S. Hab den code nicht ausprobiert, hoffe aber trotzdem das er stimmt



  • @PAD
    Dann meldet er mir nur das der Index ein Feld oder einen Zeigertypen benötigt
    Sorry aber hab c nicht gelernt und wei´ß nur das ich für printf stdio.h einbinden muss



  • Es ist mir klar, das wenn ich es normal in der main abfragen würde es richtig herum ausgeführt wird, ich will es nur in einer extra Funktion haben!
    Und ich kann nicht verstehen das die Funktion die Ausgabe der Spalten umdreht. oder Sie ich den Wald vor lauter Bäumen nicht.



  • Hier die Korrektur
    😡 Man sollte Code doch immer testen bevor man ihn rausgibt 😡

    void test(const short *test)  
    {  
        for(short i = 0; i<=2; i++) 
         { 
          for(short j=0; j<3; j++)  
           { 
           printf("[%1.1i,%1.1i] %1.1i\t",i,j,test[i*3+j]); 
           } 
          printf("\n"); 
         } 
    return; 
    }
    

    Und das Ergebnis

    [0,0] 0 [0,1] 0 [0,2] 0
    [1,0] 0 [1,1] 0 [1,2] 0
    [2,0] 0 [2,1] 0 [2,2] 0
    Gib bitte die Reihe an:1
    Gib bitte die Spalte an:2
    [0,0] 0 [0,1] 0 [0,2] 0
    [1,0] 0 [1,1] 0 [1,2] 1
    [2,0] 0 [2,1] 0 [2,2] 0
    Press any key to continue

    Wie du siehst scheint dein Algorythmus richtig zu funktionieren.

    Irgendetwas in deinem

    cout << *test++  << '\t' << *test++ << '\t' << *test++ << '\n';
    

    mus die Probleme verursachen. Da bin ich aber nicht der richtige Ansprechpartner für.

    🤡 (da ich old fashoned bin, nehme num debuggen immer das was ich am besten kenne und das ist c) 🤡

    Stell die Frage mit dem Cout nochmal im C++ Forum vielleicht kann dir einer helfen



  • Unreg. schrieb:

    cout << *test++  << '\t' << *test++ << '\t' << *test++ << '\n';
    

    Was soll das, deiner Meinung nach, ausgeben? Das gleiche wie »cout << test[0] << '\t' << test[1] << '\t' << test[2] << '\n';«?

    Dein Quelltext hat undefiniertes Verhalten (soweit ich sehe), Suchwort Sequenzpunkt.



  • @ Daniel E.
    Jetzt hab ich denn Wald gefunden ( Dank dir!) und zwar muss es richtig so heißen:

    void test(const short *test) 
    { 
        for(short i = 0; i<=2; i++)
    	{
    		for(short j=0;j<=2;j++)
    		{
    			cout << *test;
    			test++;
    		}
    		cout << '\n';
    	}
    }
    

Anmelden zum Antworten