Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
#include <iostream> #include <fstream> using namespace std; int main () { int Zahl; int Zaehler; if (Zaehler == 0) { Zaehler++; cout << "Bitte eine Zahl eingeben" << endl; cin >> Zahl; ofstream Output ("Zahl.zhl", ios::binary); if (Output == NULL) { cout << "Datei konnte nicht aufgerufen werden" << endl; return 3; } Output.write ((char *) &Zahl, sizeof (Zahl)); Output.close (); } ifstream Input ("Zahl.zhl", ios::binary); if (Input == NULL) { cout << "Datei konnte nicht gelesen werden" << endl; return 3; } Input.read ((char *) &Zahl, sizeof (Zahl)); cout << "Zahl aus Datei lautet: " << Zahl << endl; Input.close (); cin.clear(); cin.ignore(); cin.get (); return 0; } |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
//Pseudocode: ifstream input("Zahl.zhl", ios::binary); if(!input.is_open()) { frageZahlAb(); input.open("Zahl.zhl", ios::binary); if(!input.is_open()) großerFehler(); } //Zahl aus Input anzeigen |
Zitat von »"Fred"«
Beim ersten Programmstart ist Zaehler aber immer 0. Du musst also prüfen, ob bspw. die Datei existiert und wenn nicht, lässt du die Zahleingabe abfragen.
Zitat von »"Genion"«
Zudem:
ifstream Datei("Blubb", ios::binary) wird nie == NULL sein, da es kein Pointer ist.
Zitat von »"koschka"«
Zitat von »"Fred"«
Beim ersten Programmstart ist Zaehler aber immer 0. Du musst also prüfen, ob bspw. die Datei existiert und wenn nicht, lässt du die Zahleingabe abfragen.
Nein! Das ist Compilerabhängig und kann auch in den Optionen umgestellt werden. De fakto ist es riskant. (sicher nicht für dieses einfache Programm)
Zitat von »"Fred"«
Zitat von »"koschka"«
Zitat von »"Fred"«
Beim ersten Programmstart ist Zaehler aber immer 0. Du musst also prüfen, ob bspw. die Datei existiert und wenn nicht, lässt du die Zahleingabe abfragen.
Nein! Das ist Compilerabhängig und kann auch in den Optionen umgestellt werden. De fakto ist es riskant. (sicher nicht für dieses einfache Programm)
Und wo wird diese Variable dann zwischengespeichert? Was passiert, wenn man den PC ausschaltet etc.?
Ich habe ja was gegen Programme, die Speicher belegen, wenn sie nicht mehr am Laufen sind.
Zitat von »"Autor der Seite"«
Hier wird die Variable Einkommen gleich bei der Definition auf null gesetzt. (Ein Vorgang, der vielen Informatikern aus ihrer eigenen Erfahrungswelt sehr bekannt vorkommt.) Die Initialisierung von Variablen muss nicht zwingend durchgeführt werden. Allerdings ergeben sich viele Programmfehler daraus, dass Variablen nicht korrekt initialisiert waren. Es ist keineswegs gesichert, dass eine neu angelegte Variable den Wert 0 hat, solange Sie das nicht explizit festlegen.
Nein, sollte man nicht, schon gar nicht mit einer plattformabhängigen Funktion (bzw. Makro). Einen Sinn hat das Nullsetzen eines Zeigers nur, wenn dieser explizit als ungültig dargestellt werden soll und man lesend darauf zugreift. Wenn man ihn im nächsten Zug gleich überschreibt oder er den Scope verlässt, ist das unnötig.Zitat von »"koschka"«
Deswegen sonnte man auch alle Zeiger mit ZeroMemory leeren, bevor man sie benutzt
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
#include <iostream> #include <fstream> using namespace std; int FrageZahlAb (); void GroßerFehler (); int main () { ifstream input("Zahl.zhl", ios::binary); if(!input.is_open()) { FrageZahlAb(); input.open("Zahl.zhl", ios::binary); if(!input.is_open()) GroßerFehler(); } int Zahl = FrageZahlAb (); ifstream Input ("Zahl.zhl", ios::binary); Input.read ((char *) &Zahl, sizeof (Zahl)); //Zahl aus Input anzeigen cout << "Zahl: " << Zahl << endl; Input.close(); cin.clear(); cin.ignore(); cin.get(); return 0; } int FrageZahlAb() { int Zahl; cout << "Bitte Zahl eingeben" << endl; cin >> Zahl; ofstream Output ("Zahl.zhl", ios::binary); if (Output == NULL) { cout << "Fehler" << endl; } Output.write ((char *) &Zahl, sizeof (Zahl)); Output.close (); return Zahl; } void GroßerFehler () { cout << "Großer Fehler" << endl; } |
Werbeanzeige