Matrix ausgeben funktioniert nicht.



  • Ich habe (wenn auch nicht sehr elegant) aus einer Datei daten in eine Matrix gelesen, wenn ich diese nun ausgebe sieht es nach der richtigen Formatierung aus, aber der Inhalt passt komischerweise nicht, woran liegt das, kann mir wer helfen und vielleicht zeigen wie man das eleganter löst?

    Also:
    Eine gewisse Datei data1.txt, zu der ein ifstream "in" aufgebaut ist, hat folgenden Inhalt:

    ;45400000;53320000;34000000;24343400;00000000;00000000;00000000;00000000;00000000;00000000;00000000;
    Das hier ist der Inhalt!
    

    Also diese jeweils 8-stelligen Nummern und danach einen Text.

    Diese Nummern habe ich nun in eine Matrix eingelesen (13x9)

    char mask[13][9];
    

    und zwar so (wenn es irgendwie besser geht, wär ich dankbar für tips):

    for (int n = 0; n < 12; n++)
    	{
    		for (int maskelement = 0; maskelement < 8; maskelement++)
    		{
    			while (maskbuffer != ';')
    			{
    				in.get(maskbuffer);
    				readymaskbuffer[c] = maskbuffer;
    				c++;
    			}
    			for (int m_matrix_lmnt = 0; m_matrix_lmnt < 7; m_matrix_lmnt++)
    			{
    				mask[n][m_matrix_lmnt] = readymaskbuffer[m_matrix_lmnt];
    			}
    
    		}
    	}
    

    deklariert wurde alles:

    char maskbuffer;
    	char readymaskbuffer[9];
    	int c = 0;
    

    So, nun will ich die Matrix über einen ofstream "out" in eine andere Datei schreiben:

    for (int a = 0; a < 12; a++)
    	{
    		for (int b = 0; b < 8; b++)
    		{
    			out.put(mask[a][b]);
    		}
    	}
    

    Das alles funktioniert ja, nur wenn ich in die geschriebene Datei schaue, sehe ich folgendes:

    ;ÌÌÌÌÌÌ ;ÌÌÌÌÌÌ ;ÌÌÌÌÌÌ ;ÌÌÌÌÌÌ ;ÌÌÌÌÌÌ ;ÌÌÌÌÌÌ ;ÌÌÌÌÌÌ ;ÌÌÌÌÌÌ ;ÌÌÌÌÌÌ ;ÌÌÌÌÌÌ ;ÌÌÌÌÌÌ ;ÌÌÌÌÌÌ
    

    Kann mir da wer helfen? Was mach ich falsch, anscheinend wurden die Zeichen ja in die Matrix geschrieben und auch ausgegeben, nur halt falsch, woran liegts?

    Bin immer dankbar für Hilfe.



  • Die Einträge deiner Matrix sind "char". Diese werden als Zeichen interpretiert. Du willst aber Zahlen. Caste das mal nach int und schau was rauskommt:

    out.put(static_cast<int>(mask[a][b]));

    Wenn da nichts vernünftiges rauskommt, habe ich dein Problem nicht verstanden, oder du liest falsch ein.



  • Hmm, wenn ich an der Stelle

    out.put(static_cast<int> (mask[a][b]));

    schreibe kommt ein Fehler:

    error C2668: 'put' : Mehrdeutiger Aufruf einer ueberladenen Funktion

    kenne mich mit diesem Cast nicht so aus, warum is da ein Fehler?



  • D. Wu schrieb:

    Hmm, wenn ich an der Stelle

    out.put(static_cast<int> (mask[a][b]));

    schreibe kommt ein Fehler:

    error C2668: 'put' : Mehrdeutiger Aufruf einer ueberladenen Funktion

    kenne mich mit diesem Cast nicht so aus, warum is da ein Fehler?

    Dann mach mal:

    out << static_cast<int> (mask[a][b]);



  • Vielen Dank, so geht's ohne Fehler, jetzt kommt zwar in der Zieldatei das folgende, aber ich denke daran kann ich erkennen wo der Fehler liegt:

    59-52-52-52-52-52-52059-52-52-52-52-52-52059-52-52-52-52-52-52059-52-52-52-52-52-52059-52-52-52-52-52-52059-52-52-52-52-52-52059-52-52-52-52-52-52059-52-52-52-52-52-52059-52-52-52-52-52-52059-52-52-52-52-52-52059-52-52-52-52-52-52059-52-52-52-52-52-520



  • Ponto schrieb:

    Die Einträge deiner Matrix sind "char". Diese werden als Zeichen interpretiert. Du willst aber Zahlen. Caste das mal nach int und schau was rauskommt:

    Und was ist, wenn das Zeichen eine Zahl darstellt?

    Vergl:

    int main()
    {
        cout << cin.rdbuf() << endl;
    }
    

    Gruß Caipi


Anmelden zum Antworten