Frage zu getline



  • Hallo ich krieg es einfach net geregelt das mir das Ergebniss als normale Dezimalzahl ausgeben wird 😞

    Ich hab das vor ein paar Monaten schon mal gemacht aber ich hab wieder vergessen wie es geht 😞

    Kann mir da wer helfen plz?

    char key[4];
    char erg;
    
    cout<<"Zahlen eingeben ";
    cin.getline(key,4);
    
    erg = key[0] + key[1];
    
    cout<<erg;
    


  • char erg;
    ->
    int erg;

    oder du lässt es mit char (hast dann aber keinen all zu großen wertebereich) und änderst die ausgabe:
    cout << int(erg);

    bb



  • Ehm wie meinst du das jetzt etwas so ?

    Aber da wird mir auch nicht das richtige ergbeniss ausgeben 😞

    #include <iostream>
    #include <sstream>
    using namespace std;
    
    int main(int argc, char* argv[])
    {
    char key[4];
    char erg;
    
    cout<<"Zahlen eingeben ";
    cin.getline(key,4);
    
    erg = key[0] + key[1];
    
    cout<<(int ) erg;
    
    system("PAUSE");
    }
    //---------------------------------------------------------------------------
    


  • @ blup:

    unskilled schrieb:

    char erg;
    ->
    int erg;

    Das deutet darauf hin, dass du char erg; im Code durch int erg; ersetzen solltest. 😉

    Du kannst dann die Zahl direkt einlesen (hier ohne Prüfung auf Korrektheit):

    int Zahl;
    std::cin >> Zahl;
    

    Falls du trotzdem mal eine ganze Linie als Zeichenkette einlesen willst, würde ich statt des char -Arrays einen std::string nehmen, sonst hast du sehr schnell einen Pufferüberlauf, wenn du einmal mehr als 4 Zeichen eingibst. Allerdings musst du dann zur globalen Funktion std::getline() wechseln und std::getline(std::cin, dein_string); schreiben.



  • Dann hab ich ja das selbe Problem wie jetzt -.-



  • Was für ein Problem? Drück dich verständlich aus.

    Hast du meine Anweisungen überhaupt befolgt?



  • Ich hab eine Lösung gefunden aber gut is die glaub ich nicht oder ?

    #include <iostream>
    #include <sstream>
    using namespace std;
    
    int main(int argc, char* argv[])
    {
    
    string key;
    
    int z1;
    int z2;
    int erg;
    
    cout<<"Zahlen eingeben ";
    getline(cin, key);
    
    stringstream str_1;
            str_1 << key[0];
            str_1 >> z1;
    
    stringstream str_2;
            str_2 << key[1];
            str_2 >> z2;
    
    erg = z1 + z2;
    
    cout<<erg;
    
    system("PAUSE");
    }
    

    Wieso krieg ich sowas einfach gerade nicht hin AHH ICH HASSE ES 😡 !



  • Wie wärs mit Folgendem?

    int z1;
    int z2; 
    std::cin >> z1 >> z2;
    
    std::cout << z1 + z2 << std::endl;
    

    Mit std::stringstream bist du aber grundsätzlich flexibler.



  • Da du eh schon #include <sstream> hast, kann ich ja jetzt auch die Streams benutzen^^
    Btw: sag mal, was du eigtl machen möchtest - vll gibts da nen besseren Weg...

    #include <iostream>
    #include <sstream>
    #include <string>
    
    int StrToInt(const std::string &in)
    {
      int R;
      std::stringstream ss;
      ss << in;
      ss >> R;
      return R;
    }
    
    void halte_console_offen()
    {
      std::cin.clear(); 
      std::cin.ignore( std::cin.rdbuf()->in_avail() );
      std::cin.get();
    }
    
    int main()
    {
      std::string key;
      cout << "Zahlen eingeben ";
      std::getline(std::cin, key);
    
      int ergebnis = StrToInt(key);
      cout << ergebnis;
    
      halte_console_offen();
    }
    

    bb



  • Sowas will ich machen^^

    #include <iostream>
    #include <sstream> 
    using namespace std; 
    
    int main(int argc, char* argv[]) 
    { 
    
    string key; 
    
    int z1; 
    int z2; 
    int erg; 
    
    cout<<"Zahlen eingeben "; 
    getline(cin, key); 
    
    stringstream str_1; 
            str_1 << key[0]; 
            str_1 >> z1; 
    
    stringstream str_2;
            str_2 << key[1]; 
            str_2 >> z2; 
    
    erg = z1 + z2; 
    
                    if (erg==4)
                    {
                       cout<<"ok";
                    }
    
                    else
                    {
                      cout<<"err";
                    }
    
    system("PAUSE"); 
    }
    


  • Du kannst den selben Stringstream noch mal benutzen, da ersparst du dir ein paar Byte. 😉

    Deine Methode jetzt ist der offizielle Weg. Etwas "tricky" ist:

    int erg;
    char c_string[4];
    cin.getline(c_string, 4);
    erg = (c_string[0] + c_string[1]) - '0';
    cout << erg << endl;
    

    Gilt natürlich nur für einstellige Zahlen. 😉



  • Sowas will ich machen^^

    du sollst es in worten beschreiben...
    dein so beschriebenes problem lässt sich ca. 999999999999x hübscher lösen...

    bb

    PS:

    erg = (c_string[0] + c_string[1]) - '0';

    '0' + '0' - '0' = '0'. sollte aber 0 sein...
    außerdem kanns bei char+char sehr leicht zu nem überlauf kommen - bei ner vorzeichenbehafteten zahl(wie es char sein _könnte_ (idR auch ist)) ist der imho nicht standardisiert.
    außerdem glaub ich auch nicht, dass der C++ standard garantiert, dass '0' ... '9' direkt aufeinanderfolgen - aber das ist wohl eher krümelkackerei ;o)



  • unskilled schrieb:

    außerdem glaub ich auch nicht, dass der C++ standard garantiert, dass '0' ... '9' direkt aufeinanderfolgen

    hier falsch.


Anmelden zum Antworten