Problem mit float Wert in String kopieren und ausgeben



  • Hallo zusammen,

    dies ist mein problematischer Code:

    #include <stdlib.h>
    #include <fstream>
    #include <iostream>
    #include <string>
    #include <sstream>
    #include <string>
    
    int main ()
    {
    
        string str;
        //std::stringstream ss;
    
        float temperatur;
        int i = 1;
        while(1)
        {
    
            temperatur = temp();
    
            str << "Die Temperatur betraegt" << temperatur << "Grad Celius";
            //ss >> ausgabe;
    
            std::cout << str<<std::endl;
    
        }
    
    return 0;
    }
    

    Ich lese mittels temperatur = temp(); einen float Wert aus der Funktion temp() aus. Diesen Floatwert möchte ich gerne mit ein paar Wörtern in einen String schieben, um diesen später in eins auszugeben und weiterzuverarbeiten.

    Meine Vorstellung war, dass

    str << "Die Temperatur beträgt" << temperatur << "Grad Celsius" << endl;
    

    den String komplett beschreibt und mittels:

    std:ccout << str<< std::endl;
    

    den kompletten Satz ausgibt.

    Jedoch wird nur jedes einzelne Wort beim erneuten while-Schleifen durchgang ausgegeben.

    Was muss ich am Quellcode ändern, dass der komplette Text ausgegeben wird?

    Gruß 🕶



  • Dein Beispiel sollte noch nicht einmal kompilieren.
    Wesentlich simplere C++11 Lösung ohne std::stringstream:

    auto str = "Die Temperator betraegt " + std::to_string(temperatur) + " Grad Celcius";
    

    Wesentlich simplere Lösung ohne string:

    std::cout << "Die Temperatur betraegt" << temperatur << "Grad Celius\n";
    

    BTW: Die Variable temperatur brauchst du erst in Zeile 20, definier sie also erst dann und nicht in Zeile 15. Versuche Variablen erst zu definieren, wenn du ihnen auch einen vernünftigen Wert geben kannst.



  • Perfekt!
    Besten Dank!

    Mal eine andere Frage:

    Ich habe ein nettes Skript, dass Wörter vorliest.
    Das Skript schaut folgendermaßen aus (speech.sh)

    #!/bin/bash
    say() { local IFS=+;/usr/bin/mplayer -ao alsa -really-quiet -noconsolecontrols "http://translate.google.com/translate_tts?tl=de&q=$*"; }
    say $*
    

    Im C++ Programm kann ich es folgendermaßen öffnen:

    system("./speech.sh 'Hallo Welt!' ");

    Wie kann ich das so modifizieren, dass ich in dieses Skript meinen kompletten Stream als Übergabewert einbinden kann?



  • system(("./speech.sh '" + str + "'").c_str()); // c_str gibt dir ein nullterminierten C String
    

    Es gibt unter Linux allerdings garantiert einen besseren Weg ein Skript auszuführen, als std::system.


  • Mod

    Nathan schrieb:

    system(("./speech.sh '" + str + "'").c_str()); // c_str gibt dir ein nullterminierten C String
    

    Es gibt unter Linux allerdings garantiert einen besseren Weg ein Skript auszuführen, als std::system.

    Und es gibt garantiert noch bessere Möglichkeiten, mplayer aufzurufen, als ein Script aufzurufen, das den mplayer aufruft.
    Vermutlich gibt es sogar noch eine viel bessere Möglichkeit, Google Translate wieder zu geben, als ein Script aufzurufen, das den mplayer aufruft, das Google Translate aufruft.



  • SeppJ schrieb:

    Nathan schrieb:

    system(("./speech.sh '" + str + "'").c_str()); // c_str gibt dir ein nullterminierten C String
    

    Es gibt unter Linux allerdings garantiert einen besseren Weg ein Skript auszuführen, als std::system.

    Und es gibt garantiert noch bessere Möglichkeiten, mplayer aufzurufen, als ein Script aufzurufen, das den mplayer aufruft.
    Vermutlich gibt es sogar noch eine viel bessere Möglichkeit, Google Translate wieder zu geben, als ein Script aufzurufen, das den mplayer aufruft, das Google Translate aufruft.

    Das würde ich direkt unterschreiben.
    Jedoch mangels C++ Umsetzungskenntnis präferiere ich diese funktionale Lösung.
    Habt ihr einen Ansatz den ich verfolgen kann, dass die Umsetzung sinnvoller macht?


Log in to reply