Mit Strings rechnen?
-
Hallo,
ich habe einige Zahlen mit C++ in eine TXT-Datei gespeichert und diese zeilenweise wieder ausgelesen und in verschiedene Variablen gespeichert:
//Die Variablen string Anzahl, Alter, Gewicht; //Datei öffnen ifstream f ("datei.txt"); //Variable für die einzelnen Zeilen string Zeile; //Zeile 1 lesen und Wert in Variable "Anzahl" speichern Zeile = "1"; getline (f, Zeile); Anzahl = Zeile; //Zeile 2 lesen und Wert in Variable "Alter" speichern Zeile = "2"; getline (f, Zeile); Alter = Zeile; //Zeile 3 lesen und Wert in Variable "Gewicht" speichern Zeile = "3"; getline (f, Zeile); Gewicht = Zeile;Das mit dem Auslesen und Speichern klappt auch super. Allerdings habe ich nur String-Variablen und da es sich um Zahlen handelt, möchte ich diese als Integer haben. Da habe ich auch eine Funktion zum Umwandeln (mit stringstreams) und das klappt auch.
ABER:
Wie kann ich jetzt damit rechnen? Wandle ich die Strings evtl. an falscher Stelle um?//An anderer Stelle soll von Anzahl 1 abgezogen werden, wenn man was macht Anzahl -= 1;So klappt das nicht, da "Anzahl" ja noch ein String ist. Also habe ich es mal so versucht:
StringToInteger(Anzahl) -= 1;Da schreibt er die Fehlermeldung: "Linker Operand muss ein L-Wert sein".
Auch so habe ich es mal versucht:
Anzahl = StringToInteger(Anzahl) - 1;Da gibt er mit als Ergebnis nur "Z" aus. Wenn man es nochmal zur Laufzeit um 1 verringert, gibt er immer nur "." aus

Ich hoffe, ihr könnt mir da ein wenig helfen. Bin noch nicht so erfahren mit C++!
-
CV schrieb:
StringToInteger(Anzahl) -= 1;Da schreibt er die Fehlermeldung: "Linker Operand muss ein L-Wert sein".
Da hat er auch recht.

Die Funktion StringToInteger gibt wahrscheinlich einen "int" zurück. Aber keine Variable, sondern einen Wert vom Typ int. Einem Wert kann man aber logischerweise nichts zuweisen, sonst könnte man ja auch "5 = 2" schreiben.CV schrieb:
Auch so habe ich es mal versucht:
Anzahl = StringToInteger(Anzahl) - 1;Anzahl bleibt hier aber ein String und keine Zahl!
Lösung: Nach Zahl umwandeln, dann rechnen:
int amount = StringToInteger(buf); // Anzahl wäre hier buf, nicht verwirren lassen amount -= 1; std::cout << amount; // Hier müsste wieder nach "string" umgewandelt werden, aber die Standard-Streams können das alleine.Und wo wir gerade beim Thema Streams sind:
int anzahl; ifstream file("test.txt"); file >> anzahl; anzahl -= 1; ofstream outfile("out.txt"); outfile << anzahl;
-
Danke dir cooky451. Klappt jetzt alles

-
cooky451 schrieb:
Und wo wir gerade beim Thema Streams sind:
int anzahl; ifstream file("test.txt"); file >> anzahl; anzahl -= 1; ofstream outfile("out.txt"); outfile << anzahl;Zeig doch gleich <fstream> ..!
int anzahl; fstream file("test.txt",ios::out|ios::in|ios::trunc|ios::app); file >> anzahl; --anzahl;//Nimm ein präfix-dekrement file << anzahl; file.close();
-
Hacker schrieb:
--anzahl;//Nimm ein präfix-dekrementBei int ist das egal.
Hacker schrieb:
file.close();Wenn dich der Erfolg nicht interessiert, verlass dich auf RAII.
-
314159265358979 schrieb:
Hacker schrieb:
--anzahl;//Nimm ein präfix-dekrementBei int ist das egal.
Ist es auch, es ist nur kürzer.
Sorry, war unnötig das zu Kommentieren (die Anweisung im Code).