Frage zu Strings und Fuktion
-
Hey, Ich wollte ein Spiel Programmieren und habe ein Problem:
Nachdem ich den String zum int gemacht habe kann ich ihn nicht +1 machen es diente nur als als Test aber wenn es hier schon nicht funktioniert...
#include <fstream> #include <iostream> #include <string> #include <sstream> int String_Int(std::string b) { int a; std::stringstream c; c << b; c >> a; return a; } using namespace std; int Save(int a) { ofstream schreiben; schreiben.open("RSO.txt"); schreiben << "Level: "<< endl; schreiben << a; schreiben.close(); } using namespace std; int main(void) { do { ifstream lesen;string unusabel1;string DL; lesen.open("RSO.txt"); getline(lesen,DL); int a = String_Int(DL); cout << "Test" << endl; a++; Save(a); } while(DL != 5); return 0; }Wenn jemand eine Ahnung hat wie ich das ganze umschreiben muss dann bitte schreiben

-
"Kann ihn nicht +1 machen" - da ist jetzt sofort jedem klar, wo das Problem ist.
Geraten: du öffnest eine Datei zum Schreiben, die du noch zum Lesen geöffnet hast. Das kann schief gehen. Und da du keine deiner Dateioperationen auf Fehler prüfst, merkst du es auch nicht.
-
Ich würde die Datei in einen vector<int> lesen, die Datei schließen, dann darauf deine gewollte(n) Operation(en) ausfüren, und dann wieder den kompletten vector in die Datei schreiben.
Datei öffnen:
const std::string filename("RSO.txt"); std::ifstream in(filename); if (!in) // wir müssen schon schauen, ob die Datei überhaupt offen ist. { std::cerr << "Datei '" + filename + "' konnte nicht geöffnet werden\n"; return 1; }Einlesen:
std::vector<int> numbers; for (int num; in >> num; ) // Abbruchbedingung (in >> num) sorgt dafür, dass wir num nicht verarbeiten, falls versucht wurde irgend ein Mist einzulesen. { numbers.emplace_back(num); }ausgabe:
std::ofstream out(filename); for (auto num : numbers) { out << num << '\n'; }Ist jetzt natürlich alles nur beispielhaft
-
@TE, dein Code ist Quark.
Bitte versuche es erneut.
-
manni66 schrieb:
"Kann ihn nicht +1 machen" - da ist jetzt sofort jedem klar, wo das Problem ist.
Geraten: du öffnest eine Datei zum Schreiben, die du noch zum Lesen geöffnet hast. Das kann schief gehen. Und da du keine deiner Dateioperationen auf Fehler prüfst, merkst du es auch nicht.
Sorry bin noch recht unerfahren aber ein
lesen.close();
macht leider keinen Unterschied in der Konsole

-
FP C++ Neuling schrieb:
macht leider keinen Unterschied in der Konsole
Welchen Unterschied sollt es den warum machen?
Wenn du dein Problem nicht nachvollziehbar beschreibst, wirst du auch keine Hilfe erhalten.
-
manni66 schrieb:
Welchen Unterschied sollt es den warum machen?
Wenn du dein Problem nicht nachvollziehbar beschreibst, wirst du auch keine Hilfe erhalten.
Gut dann noch mal,
nach dem Compiliren lass ich mir immer weder mit cout << "Test:"
den Wert a ausgeben dann bekomme ich allerdings immer nur die gleiche Nummer alsoTest: 1
Test: 1
Test: 1
Test: 1
Test: 1...Allerdings soll ja durch
Save();
Der Wert a + 1 gespeichert werden
also verstehe ich nicht wieso er nur 1 und nicht 2 Speicher denn die Txt datei sieht immer so aus
Level:
1Kannst du mir bitte helfen?
-
FP C++ Neuling schrieb:
Gut dann noch mal,

Bisher war es dir offensichtlich zu mühselig, irgendetwas sinnvolles zu sagen.
Des weiteren gibt der gezeigte Code die Zahl nicht aus.
Zusammenfassend: sieh zu, wie du damit zurande kommst.