Variable soll Text ausgeben



  • Hallo,

    möchte eine Variable dazu bringen einen Text auszugeben wenn etwas bestimmtes passiert (if-verzweigung).

    Beispiel:

    ergebnis=zahl1+zahl2
    operation= "Addition"

    Also möchte ich, dass oben im Programm, wo die variable "operation" steht "Addition" ausgegeben wird. Wie mache ich das?

    operation= cout << "Addition" << flush; ??



  • 😕
    Was willst du?
    So etwas?

    if (irgendwas)
        std::cout << "irgendwas";
    


  • ...



  • so in der art, aber geht das nicht etwas leichter ausgedrückt?

    habe

    sruct name
    {
     char operation
    }
    
    int main()
    {
     name rechnung
     cout << rechnung.operation << flush;
    
    if (...)
    {
     rechnung.operation= "Addition";
    }
    
    return 0
    }
    

    [code="cpp"]



  • ...



  • ich wollte hier keinen richtigen kompletten code zeigen, sondern nur wie ich es ungefähr machen würde..



  • fatal06 schrieb:

    Also möchte ich, dass oben im Programm, wo die variable "operation" steht "Addition" ausgegeben wird. Wie mache ich das?

    operation= cout << "Addition" << flush; ??

    Ja schön dass du das möchtest. Die Antwort darauf wie man das macht ist trotzdem: am besten gar nicht.


  • Mod

    So langsam kristallisiert sich heraus, was du möchtest. Verständliche Version, damit du verstehst, was passiert:

    #include <iostream>
    #include <string>
    
    class StreamBinder
    {
    private:
      std::ostream *stream;
    public:
      void bind(std::ostream &out) { stream = &out; }
      void write(std::string const &what) { (*stream) << what << std::flush; }
    };
    
    void bind_StreamBinder(std::ostream &stream, StreamBinder &binder)
    {
      binder.bind(stream);
    }
    
    int main()
    {
      StreamBinder sb;
      bind_StreamBinder(std::cout, sb);
      if (true)
        sb.write("Addition\n");
    }
    

    Und nun mit der von dir gewünschten Syntax:

    class StreamBinder
    {
    private:
      std::ostream *stream;
    public:
      void bind(std::ostream &out) { stream = &out; }
      void operator=(std::string const &what) { (*stream) << what << std::flush; }
    };
    
    void operator<<(std::ostream &stream, StreamBinder &binder)
    {
      binder.bind(stream);
    }
    
    int main()
    {
      StreamBinder sb;
      std::cout << sb;
      if (true)
        sb = "Addition\n";
    }
    

    Nun fällt dem erfahrenen Leser jedoch sofort auf, dass dies bloß ein Wrapper um einen Zeiger (oder meinetwegen auch eine Referenz, aber das ging nicht 100% bei der vorgegebenen Syntax) auf einen std::ostream ist. Daher liegt die Frage nahe: Wieso nicht gleich einen Zeiger/Referenz nehmen?

    #include <iostream>
    
    int main()
    {
      std::ostream &viel_einfacher = std::cout;
      if (true)
        viel_einfacher <<  "Addition\n";
    }
    


  • hm.. das ist mir alles leider nicht schlüssig und wurde so in meinem Unterricht noch nicht vermittelt.
    Ich werde in den Schulbüchern weiter suchen müssen. Trotzdem danke!



  • ...



  • Die Frage ist schon merkwürdig. Eine Variable kann keinen "Text ausgeben". Aber wenn der gezeigte Code so funktionieren soll, dann bitte schön:

    #include <iostream>
    
    struct Operation
    {
      void operator= (const char* s) const
      {
        std::cout << s;
      }
    };
    
    int main(int argc, char* argv[])
    {
      Operation operation;
    
      operation = "Addition";
    }
    


  • Naja, vielleicht nochmal anders gefragt:

    Kann ich am Ende einer If-Verzweigung einen Text in eine Variable einlesen?

    cin >> variable >> "Hallo";
    

    Also wenn das Programm in die if schleife springen sollte, dann soll ein Text in die variable geschrieben werden und überall wo diese variable ist, der Text ausgegeben werden.
    Mit Zahlen funktioniert das ja auch wunderbar..



  • std::string value;
    value = "Text";
    

    ?



  • tntnet schrieb:

    Die Frage ist schon merkwürdig. Eine Variable kann keinen "Text ausgeben". Aber wenn der gezeigte Code so funktionieren soll, dann bitte schön:

    #include <iostream>
    
    struct Operation
    {
      void operator= (const char* s) const
      {
        std::cout << s;
      }
    };
    
    int main(int argc, char* argv[])
    {
      Operation operation;
    
      operation = "Addition";
    }
    

    Das
    operation = "Addition";
    ist nicht besser als
    cout << "Addition";
    , also nehmen wir doch einfach cout.



  • ...


  • Mod

    tntnet schrieb:

    Eine Variable kann keinen "Text ausgeben".

    Das ist aber genau das, was std::cout (ein Objekt (= Variable) vom Typ ostream, das an stdout gebunden ist) macht. [/klugscheiß]



  • SeppJ schrieb:

    tntnet schrieb:

    Eine Variable kann keinen "Text ausgeben".

    Das ist aber genau das, was std::cout (ein Objekt (= Variable) vom Typ ostream, das an stdout gebunden ist) macht. [/klugscheiß]

    Bloss nicht über den operator =.
    Wobei ich hier das Hauptproblem da sehe, dass der OP sich überhaupt nicht ausdrücken kann.



  • ...


Anmelden zum Antworten