matrix[0][1] == matrix[1][0] ... ???
-
Es ist mir ja schon fast ein wenig peinlich zu fragen.
Aber ich habe ein sehr merkwürdiges Problem.Ok, es ist auch schon ein wenig später, aber sowas sollte ich ja eigentlich noch blicken.
Also ich erstelle ein 2x2 Array:
int matrix[2][2];Und nehme eine Wertzuweisung vor:
matrix[0][0]=1; matrix[0][1]=2; matrix[1][0]=3; matrix[1][1]=4;Und lasse mir diese ausgeben:
cout << "Das ist matrix[0][0]: " << matrix[0][0] << "\n"; cout << "Das ist matrix[0][1]: " << matrix[0][1] << "\n"; cout << "Das ist matrix[1][0]: " << matrix[1][0] << "\n"; cout << "Das ist matrix[1][1]: " << matrix[1][1] << "\n";Und erhalte als Ergebnis:
Das ist matrix[0][0]: 1
Das ist matrix[0][1]: 3
Das ist matrix[1][0]: 3
Das ist matrix[1][1]: 4
Drehe ich die initialisierung der Werte in der Reihenfolge(!) um, zb. so:
matrix[0][0]=1; matrix[1][0]=3; //vertauscht matrix[0][1]=2; //vertauscht matrix[1][1]=4;Erhalte ich als Ausgabe:
Das ist matrix[0][0]: 1
Das ist matrix[0][1]: 2
Das ist matrix[1][0]: 2
Das ist matrix[1][1]: 4

Also meine einfache Frage: WAS übersehe ich? Weil "normal" ist das ja wohl nicht oder? Ich meine wenn ich eine Matrix mit verschiedenen Werten aufschreibe...also ihr wisst was ich meine?

Ein wenig verwirrt und schon fast belustigt, habe ich aber trotzdem leider keine Idee woran es liegen kann?!
Hoffentlich ist es nicht zuuu peinlich?
-
Also ich muss sagen ich kann dein Problem nicht nachvollziehen und weiß auch nicht was du falschg machst... ich hab das bei mir mal spaßeshalber compiliert und es macht - wer hätte das gedacht - genau das, was man erwartet...
Ich kann dich nur beruhigen:
matrix[0][1] != matrix[1][0]Außerdem solltest du statt
<< "\n";<< endl;verwenden

-
nirsaja schrieb:
Außerdem solltest du statt
<< "\n";<< endl;verwenden

Kannst du das begründen?
-
-
nirsaja schrieb:
Außerdem solltest du statt
<< "\n";<< endl;verwenden

genau umgekehrt!
endl leert gleichzeitig noch den buffer was ne schlimme bremse sein kann. auch sorgen die iostreams selbst dafür, dass die buffer geleert werden sobald eine eingabe erwartet wird.
-
otze schrieb:
nirsaja schrieb:
Außerdem solltest du statt
<< "\n";<< endl;verwenden

genau umgekehrt!
Ne, man nimmt das, was Sinn macht. Wenn der Buffer geflusht werden soll endl und wenn man nur nen Zeilenumbruch braucht \n.
-
Ich bin bei meinem Problem ein wenig weiter.
Wenn ich das Array so initialisiere:
int matrix[2][2];Tritt der Fehler nicht auf.
Wenn ich jedoch:
The_Matrix::The_Matrix(int rows, int columns) { int matrix[rows][columns]; //blabla hier kommt der andere krams. rows, columns = 2 }Dann tritt der Fehler (merkwürdigerweise?) auf.
Blick ich immer noch nicht.p.s. Vielen Dank für die '\n' Infos, sehr spannend zu erfahren :).
-
Walli schrieb:
otze schrieb:
nirsaja schrieb:
Außerdem solltest du statt
<< "\n";<< endl;verwenden

genau umgekehrt!
Ne, man nimmt das, was Sinn macht. Wenn der Buffer geflusht werden soll endl und wenn man nur nen Zeilenumbruch braucht \n.
mir fällt nur grad eine sache ein, bei der ein endl nützlich wär: bei exceptions. sonst brauchst du quasi nie endl.
-
Freak schrieb:
int matrix(rows, columns);
Das ist kein zweidimensionales Array. Zeig doch mal den relevanten, echten Code.
-
Freak schrieb:
The_Matrix::The_Matrix(int rows, int columns) { int matrix[rows][columns]; //blabla hier kommt der andere krams. rows, columns = 2 }Das geht auch nicht. rows und columns sind zur Compilezeit keine Konstanten. Du musst die Matrix dynamisch erzeugen (-> FAQ).
-
Ok, alles mal hier:
#include <iostream> #include <string> using namespace std; class Matrix { public: Matrix(int rows, int columns); ~Matrix(); protected: }; Matrix::Matrix(int rows, int columns) { cout << "Im Matrix-Konstruktor.\n"; int matrix[rows][columns]; matrix[0][0]=1; matrix[1][0]=3; matrix[0][1]=2; matrix[1][1]=4; cout << "Das ist matrix[0][0]: " << matrix[0][0] << "\n"; cout << "Das ist matrix[0][1]: " << matrix[0][1] << "\n"; cout << "Das ist matrix[1][0]: " << matrix[1][0] << "\n"; cout << "Das ist matrix[1][1]: " << matrix[1][1] << "\n"; } Matrix::~Matrix(){} int main() { cout << "Welcome, to the real World!\n"; Matrix myMatrix(2,2); return 0; }
-
Freak schrieb:
class Matrix { public: Matrix(int rows, int columns); // nimm hier size_t - du hast hier nur positive werte // tipp: suche nach dem ritter des size_t ^^ ~Matrix(); protected: }; // ... int matrix[rows][columns];das ist nicht erlaubt. manche compiler (u.a. gcc) erlauben es als extension.
versuche es entweder mal mit:
- int**
- std::vector< std::vector<int> >
- einem 2dVector (z.b. aus boost)imo am besten in der reihenfolge. vielleicht ist das einfach nur undefiniertes verhalten.
mfg
-
Danke für die Antwort!
Da ich gerade am lernen bin checke ich noch nicht so ganz, WAS ich genau falsch gemacht habe. Ist aber kein Problem, weil ich ja noch am lernen bin.
Werde in einer späteren Lernphase auf diese Antwort zurückgreifen.Irre, dass es ein "echter" Fehler ist und nicht irgendeine Verpeiltheit von mir :).
P.S. Compiliere mit dem g++ (GCC) 3.3.5-20050130