komische array ausgabe ohne wert



  • Hallo,

    Ich bin hier in diesem Forum neu und möchte mich kurz vorstellen.
    Ich heiße Julian und lerne C++ als reines Hobby und Spaß an der Freude und möchte euch hiermit alle herzlich begrüßen.

    Nun gleich weiter zu dem Grund des Posts.
    Ich habe folgend einen Code der Funktioniert, nur nicht wie erwartet.
    Ich glaube auch zu wissen warum, jedoch verstehe ich es nicht wirklich.
    Und darum bin ich hier. Um zu begreifen warum der Compiler das ausspuckt.

    #include <array>
    #include <iostream>
    using namespace std;
    using Spielfeldtyp = array<array<char,3>,3>;
    
    void ausgabe(const Spielfeldtyp& feld) {
      size_t nr = 1;
      for (const auto& zeile : feld) {
        cout << nr++ << " |";
        for (auto wert : zeile) {
          cout << wert << '|';
        }
        cout << '\n';
      }
    }
    
    int main()
    {
        Spielfeldtyp feld;
        ausgabe(feld);
    
    }
    

    und ausgegeben wird das hier:

    1 ||T||
    2 |||T|
    3 ||||

    Warum ein T? liegt das daran dass ich den arrays noch keinen Wert gab?
    Und warum so zufällig?
    Ich hatte den Code auch gestern abend auf dem Handy noch leicht verändert geschrieben und dann spuckte er mir in 5 von den 9 array feldern zufällige zeichen aus der ASCI tabelle aus. z.B. @ und ein geschlossenes viereck usw...
    Warum ist das so?

    Liebe grüße
    KaLul



  • KaLul schrieb:

    Warum ein T? liegt das daran dass ich den arrays noch keinen Wert gab?
    Und warum so zufällig?

    Ja, liegt daran, dass der Inhalt nicht initialisiert wurde, siehe:

    http://www.cplusplus.com/reference/array/array/array/



  • Auf 0 initialisieren geht ganz einfach;

    Spielfeldtyp feld{};
    

    Wenn z.B. Leerzeichen drin stehen sollen, würde ich es so machen:

    #include <algorithm>
    // ...
    for (auto& zeile : feld)
        std::fill(begin(zeile), end(zeile), ' ');
    


  • Ja Danke.
    Das mit 0 Initialisieren kannte ich nocht nicht. hat gut geklappt.
    Also spuckt der Compiler tatsächlich einfach irgendwas aus.
    Ist die unendliche Leere (nicht initialisierung) doch nicht leer 😃

    Dankeschön



  • Der Compiler spuckt gar nix aus, der übersetzt dein Programm nur. Irgendwas steht halt an jeder Speicherstelle. und wenn du da nicht explizit auf 0 setzt, weißt du halt einfach nicht was da steht.


Anmelden zum Antworten