int Variable gibt komische Zahl aus. (Anfänger)
-
Moin zusammen,
und zwar möchte ich mir in einer kleinen Funktion unter anderem die Anzahl der Zeichen eines Textes ausgeben lassen.
Die Variable counter gibt aber nicht die Zeichen aus (Sollte normal 12 sein), sondern bei "int counter" 2293210 und bei "short int counter" 15.Warum kriege ich bei "int" und "short int" verschiedene Zahlen raus ?
Und warum erhalte ich nicht das richtige Ergebnis ?Vielen Dank für eure Hilfe
#include <iostream> #include <fstream> using namespace std; void write_file(string dateiname, string text); void read_file(string dateiname); int main(){ write_file("test.txt","abcdefg12345"); read_file("test.txt"); return 0; } void write_file(string dateiname, string text){ ofstream output; output.open(dateiname.c_str(), ios_base::out); output << text << endl; output.close(); } void read_file(string dateiname){ ifstream input; input.open(dateiname.c_str(), ios_base::in); char zeichen; int counter; while(!input.eof()){ counter++; input.get(zeichen); cout << zeichen; } cout << counter << " Zeichen"; input.close(); }
-
Variablen haben nicht den Wert 0, wenn du sie anlegst, sondern einen Wert der zufällig gerade im Speicher steht. Du musst deinem Zähler erst einen Anfangswert zuweisen, bevor du ihn benutzt.
edit: Und noch eine kleine Bemerkung:
Die Schleife
while(!input.eof()){ counter++; input.get(zeichen); cout << zeichen; }wird nicht das tun, was du wahrscheinlich erwartest. Denn wenn das letzte Zeichen der Datei gelesen wurde, ist noch nicht input.eof(), sondern erst, nachdem versucht wird über das Ende hinus zu lesen. Das heißt, dass das letzte get, welches versucht über das Ende zu lesen, fehlschlägt, du aber trotzdem hochzählst und ausgibst. Eine einfache Möglichkeit dies zu verhinden ist folgendes:
while(input.get(zeichen)){ counter++; cout << zeichen; }
-
Ah vielen Dank SeppJ. Hast mir sehr weiter geholfen.
Das Variablen ohne Initialisierung nicht den Wert 0 haben, hätte ich nicht gedacht. Gut zu wissen

Das mit der Schleife hatte ich mir schon beinahe denken können. Danke für den Lösungsvorschlag, ich werde es in Zukunft so einsetzen.
Grüße,
SalamiDealer
-
#include <iostream> #include <fstream> #include <string> //hattest du vergessen using namespace std; void write_file(const char* dateiname, const std::string &text); void read_file(const std::string &dateiname); //google: passing by copy/value int main() { write_file("test.txt", "abcdefg12345"); read_file("test.txt"); } void write_file(const char* dateiname, const std::string &text) { ofstream output(dateiname); output << text << endl; } void read_file(const char* dateiname) { ifstream input(dateiname); int counter = 0; for(char zeichen; input.get(zeichen); ++counter) cout << zeichen; cout << counter << " Zeichen"; }bb
PS: Wie du gesehen hast, hab ich ein wenig weggelassen - war nicht wirklich alles nötig... statt
int counterwürde ich auchsize_t counternehmen
-
Hi unskilled, danke für deine Mühe.
Ein paar Sachen verstehe ich in deinem Code nicht. Ich stehe noch ziemlich am Anfang
Aber ich werde es mir mal durchgucken.Lg
SalamiDealer
-
SalamiDealer schrieb:
Hi unskilled, danke für deine Mühe.
Ein paar Sachen verstehe ich in deinem Code nicht. Ich stehe noch ziemlich am Anfang
Aber ich werde es mir mal durchgucken.Lg
SalamiDealerFrag ruhig nach, wenn dir was unklar ist.