Konsolen eingabe in Binärdatei schreiben
-
Hallo,
ich versuche gerade die Benutzereingabe aus der Konsole in eine Binärdatei zu schreiben, mit folgendem Code:
void DateiVerwaltung::writeBin() { std::ofstream file; std::string eingabe; int nZahl; float fZahl; char c; file.open(binDatei, std::ios::out | std::ios::binary); do { std::cout << "Wert: "; std::cin >> eingabe; if( (sscanf(eingabe.c_str(), "%f", &fZahl)) == 1 && eingabe.find(".") != std::string::npos ) { file.write((char*)&fZahl, sizeof(float)); std::cout << "Float geschrieben" << std::endl; } else if( (sscanf(eingabe.c_str(), "%d", &nZahl)) == 1) { file.write((char*)&nZahl, sizeof(int)); std::cout << "int geschrieben" << std::endl; } else if( eingabe.length() == 1 && (sscanf(eingabe.c_str(), "%c", &c)) == 1) { file.write((char*)&c, sizeof(char)); std::cout << "char geschrieben" << std::endl; } else { file.write( eingabe.c_str(), sizeof(char)*eingabe.length()); std::cout << "string geschrieben" << std::endl; } std::cout << "weiteren Wert hinzufuegen? (j/n): "; std::cin >> eingabe; if(eingabe == "n" || eingabe == "N") break; } while(true); file.close(); }Frage: Ist das soweit OK? und wenn ja gibt es da evtl. bessere/schönere Möglichkeiten die Eingabe richtig zu konvertieren ohne den Benutzer nach dem Datentyp zufragen?
-
hm... gibt es einen Grund für
if( (sscanf(eingabe.c_str(), "%f", &fZahl)) == 1 && eingabe.find(".") != std::string::npos )ginge doch auch
if(cin >> f){ // do something here }wieso multiplizierst du die Anzahl der Elemente mit char?
Die Anzahl bleibt doch eh immer gleich
-
Ist den die Bedingung
if(cin >> f){ // do something here }dann nicht immer Wahr? Es sollen ja 4 verschiedene Typen gespeichert werden...

sizeof(char) == 1 Byte und string hat doch X Bytes
Evtl. noch zur Info die Datei soll später wieder gelesen werden und die Werte auf der Konsole ausgegeben werden.