optionale Eingabe mit String nach Float Umwandlung



  • Hallo zusammen,

    hab mal wieder ein keliens Problem:

    für mein Programm soll der nutzer mehrer variabeln eingeben können.
    Bei diesen handelst es sich um strings bzw hauptsächlich floats.
    Zusätzlich soll aber auch keine eingabe möglich sein.

    Nach etwas herumsuchen bin ich unteranderem hier auf einen Forumsbeitrag (http://www.c-plusplus.net/forum/201083-10)
    zu leeren Eingaben und zum Hinweis für die Umwandlungs von Strings in Floats im FAQ gestoßen(http://www.c-plusplus.net/forum/39488).
    das ganze habe ich mir durchgelesen und bin auf folgenden Code gekommen, der ohne Compilerfehler läuft:

    cout << "Bitte geben sie die gew\x81 \bnschte maximale Drehzahl [1/min] an:" << endl;
    		scanf(Buffer);
    		cout << Buffer << endl;
    		while ((c = getchar()) != EOF && c != '\n');
    		strstream Str1(Buffer, 20); 
    		Str1 << Buffer<< ends; 
    		Str1 >> n_max; 
    		cout << n_max << endl;
    

    Das ganze ergibt aber keine vernünftigen Ergebnisse. Ein Tauschen von scanf(Buffer); hin zu scanf("%[^\n]s",Buffer); bringt keine verbesserung .
    Nutzen von gets() oder cin funktioniert auch nicht.
    cin führt dazu, das keine Leereigaben möglich sind und gets() lässt das PRogramm die Eingabe ausm ir nicht erklärlichen gründen überspringen ...

    Zur vollständigkeit die headerdateien und die variabelendefinition:

    #include <iostream> 
    #include <fstream>
    #include <string>
    #include <time.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <vector>
    #include <iomanip>
    
    #include <strstream>
    #include <cstdlib>
    
    ...
    
    char Buffer[20];						// Übergabevariable für Eingabe!!!
    

    hoffe ihr könnt mir nen hilfreichen tip geben 😃



  • Entscheide dich für C oder C++, das verringert schon mal die Fehlerquellen.

    Dein Quelltext sieht wie C++ aus, dann wird das verschoben, wenn es so sein soll.

    Aber was sollen die C Header in C++ Quelltext? Nur die Header einfügen die benötigt werden!

    MfG f.-th.



  • Hier C++
    http://www.cplusplus.com/reference/string/getline/

    Dein Link zeigt eine C-Variante!

    MfG f.-th.



  • erst mal danke f.-th. für den Tipp.

    hab das ganze mit getline versucht ...

    cout << "Bitte geben sie die gew\x81 \bnschte maximale drehzahl [1/min] an:" <<endl;
            getline (cin,Buffer);
            while ((c = getchar()) != EOF && c != '\n'); 
    		cout << Buffer << endl; 
            strstream Str1; 
            Str1 << Buffer<< ends; 
            Str1 >> T_max; 
            cout << Buffer << endl;
            cout << m_max << endl;
    

    geb ich da nun als Eingabe 8 ein
    bleibt aber weiterhin die variable Buffer leer und n_max behält den WertO, mit dem ich die Variabel initialisiert habe.



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C (C89 und C99) in das Forum C++ (auch C++0x) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


  • Mod

    Ach, so etwas habe ich zufällig vor 2 Wochen mal selber gebraucht und mir dafür eine nette Funktion geschrieben. Ein getline mit Defaultwert. Ist nicht unbedingt hübsch, aber funktionell:

    template<typename T> T default_getline(istream &input, const T& default_value)
    {
     begin:
      try
        {
          string line;
          getline(input, line);
          if (line.size())
            {
              stringstream parser;
              T return_value;
              parser.exceptions(ios::failbit | ios::badbit);
              parser << line;
              parser >> return_value;
              return return_value;
            }
          else return default_value;
        }
      catch(ios::failure e)
        {
          cerr << "Could not read value correctly, try again: ";
          goto begin;
        }
    }
    

    Benutzung sollte klar sein, ansonsten nachfragen.



  • keine Ahnung warum, aber ich bekomme gar keine werte in die Variabel Buffer hinhein.

    hab keine ahnung warum das nicht will 😕

    bekomme nur cin >> Buffer;
    einen wert der Variabel zugewiesen alles andere funktioniert nicht ...
    mit cin kann ich aber keine leerangabe machen ...

    hab gerade nochmal überprüft wie die eingabe mit getline() funktioniert:
    setze ich das Beispielprogramm aus dem Link von f.-th. ein funktioniert das ganze 😞
    schließe daraus, das ich mit einem anderen befehl das ganze störe, aber nur mit welchem ^^


Anmelden zum Antworten