Wie kann ich Dateinamen "hochzählen"?
-
Hallo Alle,
ich bin recht neu in der C++ Programmierung, schlage mich aber, wie ich finde, recht wacker.
Ich schreibe ein kleines Programm bei dem ich Eingabevariablen (integers) später im Dateinamen verewigen möchte. Ich arbeite in Visual Studio 2010 (Win 7)
Mit scanf lese ich die Integers ein (sagen wir mal 5)<-check
Ich habe einen festen Bestandteil des Dateinames "Name.txt"
Die Datei soll am Ende heißen "Name5.txt"Ich habe nun alles mögliche versucht:
bei CStrings versagt der Compiler irgendwie (habe ca. 20 Codebeispiele ausprobiert
)bei sprintf habe ich später das problem, dass der Dateiname bei fopen den typ const char haben muss. Da bekomme ich die Konvertierung nicht hin.
Ich habe beide Wege ausprobiert:
1. einen String einlesen und dann zum Integer umwandeln
2. ein Integer einlesen und dann zum String umwandeln
bin aber beides mal gescheitert.Inzwischen bin ich sehr gefrustet, daher ist jede konstruktive Anmerkung wilkommen.
Vielen lieben Dank schonmal im voraus,
Sinuhe81
-
Mit scanf liest man aber in C++ nichts ein, genauso gibt man mit printf nichts in C++ aus, öffnet über fopen keine Dateien und benutzt kein sprintf.
Wie man einen int in einen std::string umwandelt, findest du in den FAQs soweit ich weiß.
-
Folgende FAQ Beiträge sind hier interessant
http://www.c-plusplus.net/forum/39488
http://www.c-plusplus.net/forum/39469
-
CStrings klingt als hättest du im Internet rumgesucht und hättest MFC-Beispiele gefunden. Und wie 314159265358979 schon sagte, klingt der Rest auch nach C. Bist du sicher mit dem C++? Oder bist du nur sprachverwirrt?
An sich bist du mit sprintf schon auf dem richtigen Weg (in C). Wenn du genauer sagst, was du nicht hinbekommst, kann man dir helfen.
In C++ würdest du Zeichenketten und Zahlen mit Hilfe eines Stringstreams aneinander packen.
Für das hochzählen kannst du entweder mit "echten" Zahlen rechnen (und dann Stringstreams/sprintf benutzen) oder direkt auf den Zeichenketten arbeiten. Du nimmst die letzte Ziffer, zählst diese um 1 hoch und machst (falls es 9 war) einen Übertrag auf die nächst höhere Stelle. Wie in der Grundschule.
-
Beide meiner Meinung nach nur bedingt brauchbar.
Der "Einmal Zahl nach String und zurück" - Thread benutzt einmal cout, einmal printf. std::itoa fehlt komplett. Die C-Methoden gehören da nicht rein, da sie für Anfänger nicht geeignet sind (Außer eben die Umwandlungsmethoden selbst).
Außerdem fehlt die Erklärung, warum man welche Methode wann verwenden soll.Der andere Thread begeht auch Fehler. Hier wird ein Stream explizit geschlossen, ohne zu überprüfen, ob der Vorgang erfolgreich war. Hier gehört auf Wikipedia - RAII verlinkt. Binäres Einlesen gehört da auch nur rein, wenn erklärt wird, was ein POD ist.
-
itoa ist kein Standard C++.
-
SeppJ schrieb:
itoa ist kein Standard C++.
Tatsächlich. Blöde Compilerhersteller.
-
314159265358979 schrieb:
Blöde Compilerhersteller.
Wieso, welcher von denen hat itoa denn in namespace std?
-
pumuckl schrieb:
314159265358979 schrieb:
Blöde Compilerhersteller.
Wieso, welcher von denen hat itoa denn in namespace std?
Ich meine mich erinnern zu können, dass das beim GCC der Fall ist. Bei ideone ist es allerdings doch nicht so.
Was auch noch in den Umwandlungsthread könnte, wäre boost::lexical_cast und die neuen Umwandlungsfunktionen von std::string.
Edit: Und std::strstream ist soweit ich weiß deprecated.
-
Wenn mir jemand einen guten Neuschrieb für diese Artikel gibt, dann füge ich die auch gerne ein. Sehr gerne sogar, denn die FAQ sind in einem grauenhaften Zustand und bräuchten wohl mindestens eine Mannwoche Überarbeitung. Aber der Artikel muss dann auch gut sein. Die C-Funktionen tot zu schweigen halte ich z.B. für keine gute Idee. Wenn man es richtig gezeigt bekommt, droht da keine Gefahr. Dann suchen Anfänger wenigstens nicht im Internet oder bei Jürgen Wolf nach so etwas, die es dann tatsächlich schaffen, da irgendwie Murks zu machen.
Irgendjemand hat hier vor einem Jahr schon einmal einen Neuschrieb versucht, aber da waren mir zu viele Fehler und Ungenauigkeiten drin, den neuen Artikel wollte nicht nicht komplett überarbeiten und habe ihn daher verworfen. Also Neuschrieb bitte nur anfangen, wenn ihr euch für kompetent genug haltet, sonst war die Arbeit am Ende für die Katz.