erste Zeile einlesen und Typumwandlung char->int
-
Hallo miteinander,
habe mein Programm nun soweit, das es mir die erste Zeile aus einer Datei, deren Namen ich eingeben kann
ausliest.Z.b. habe ich in meiner Datei nummerierung.txt in der ersten Zeile folgendes stehen:0001
Dieser Wert wird öfters geändert(max Wert: 9999) daher die 000....
im weiteren Verlauf soll diese eingelesene Zeile in eine int variable umgewandelt werden, da ich diese um 1 erhöhen muss..// Datei einlesen #include <string> #include <fstream> #include <iostream> #include <iomanip> using namespace std; int main() { int i=1, num=0; char zeile[250]; string datnam; cout << "Dateiname: " << flush; cin >> datnam; ifstream eingabe(datnam.c_str(),ios::in); if (eingabe.good()) { eingabe.seekg(0L,ios::beg); while (!eingabe.eof()) { eingabe.getline(zeile,250); cout << zeile << "\n"; } num = zeile; // char-konvertierung in int num++; cout << num; } else cout << "Dateifehler oder Datei nicht gefunden!\n"; cout << "\n"; return 0; }
beim kompilieren kommt folg. Fehler:
--------------------Konfiguration: read_file - Win32 Debug-------------------- Kompilierung läuft... read_file.cpp C:\Eigene Dateien\Test Sourcecodes\read_file.cpp(28) : error C2440: '=' : 'char [250]' kann nicht in 'int' konvertiert werden Diese Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat Fehler beim Ausführen von cl.exe. read_file.exe - 1 Fehler, 0 Warnung(en)
Es soll immer nur die erste Zeile ausgelesen werden!
Danke
-
benutze die atoi()
-
Studiologe schrieb:
[cpp]
num = zeile; // char-konvertierung in int
[/code]probier mal
num = atoi(zeile);
sollte gehen wenn die zahl ganz am anfang der zeile steht
-
Hallo,
Eine Konvertierung ist so nicht zulässig. Entweder du schreibst dir eine extra-Funktion, benutzt stringstreams... am besten mal in die C++-FAQ Thread "Einmal Zahl nach String und zurück" schauen.Trotzdem noch eine ganz andere Frage. Wie ich deinem Code entnommen habe, liest du eine Zahl als string ein und wandelst sie dann wieder in eine Zahl um. Warum so viel Arbeit? Du kannst doch aus einer Datei auch direkt eine Zahl einlesen.
Schreibe statteingabe.geline(zeile, 250);
eingabe >> zahl_var;
Wobei zahl_var am besten eine Variable von dem Typ ist, den du einlesen willst.
Caipi
-
Caipi schrieb:
Eine Konvertierung ist so nicht zulässig.
warum nicht?
-
@net:
Damit warst nicht du gemeint, sondern Studiologe. Meine Antwort bezog sich im Prinzip auf Studiologe's Post, war leider ein wenig zu langsam [...]Caipi
-
Ja nun funktioniert es.....
Fehlt nur noch eine klitzekleine Kleinigkeit...
steht beim ersten durchlauf ne 0 in der datei, dann steht im 2ten durchlauf ne 01 im dritten ne 012 im vierten ne 01213....
das heisst es werden immer die neuen zahlen hintendrangeschrieben....
wie kann ich es erreichen, das der gesamte inhalt der datei gekillt wirde, damit sowas nicht passiert ??Wenn das Programm lauffähig ist, poste ich hier mal den 4-Seiten KILLER-Code
Also gesucht Funktion zum löschen des Inhaltes... (mit clear(), oder so vielleicht ??)
THX
-
@Studiologe:
Das verstehe ich nicht so ganz. Möchtest du den modifizierten Inhalt, sprich die veränderte Zahl, wieder in die Datei zurückschreiben?Wenn ja, dann hilft dir vielleicht folgendes Beispiel:
#include <fstream> #include <iostream> using namespace std; int main() { fstream f("testin.txt"); int x; f >> x; cout << "\n x: " << ++x << endl; f.clear(); f.seekp(0L, ios::beg); f << x; return 0; }
/edit: Crosspost http://www.c-plusplus.net/forum/viewtopic-var-t-is-107943-and-sid-is-4f0ab2e99917b149e0e89016ab0e425f.html
Caipi
-
Hallo Leute,
ich komm doch mal auf die Ausgangsfrage zurück.
Definiert war: int num; char zeile[30];später: num = zeile;
zeile ist identisch mit zeile[0]! Zeiger auf das erste Element! Da liegt wohl ein Knoten.
Gruss Jerry
-
jerry schrieb:
Hallo Leute,
ich komm doch mal auf die Ausgangsfrage zurück.
Definiert war: int num; char zeile[30];später: num = zeile;
Was genau willst du damit sagen?
jerry schrieb:
zeile ist identisch mit zeile[0]! Zeiger auf das erste Element! Da liegt wohl ein Knoten.
Ne. zeile ist identisch mit &zeile[0]. D.h. zeile ist die Adresse des ersten Elements des Arrays zeile.
Caipi