In Datei schreiben und auslesen
-
Hi,
bin neu hier und blutiger Anfänger was C++ angeht. Aber ich benötige dringend Hilfe. Und zwar wäre ich Dankbar wenn mir eine schreiben könnte wie ich folgendes Script per fwrite, fread, fopen und fclose in eine Datei schreibe und wieder auslesen kann. Wäre gut wenn man die hinzugefügten Codes farbig darstellen könnte damit ich nachvollziehen kann was bei jedem Schritt passiert.
/* Selbstübung mit Strukturen und Funktionen */ /* Includes */ #include <iostream> #include <string.h> using namespace std; /* Definition der Strukturen */ typedef struct { char land[30]; char stadt[30]; }t_herkunft; typedef struct { char name[30]; int baujahr; char model[15]; int ps; t_herkunft pkw; }t_auto; typedef struct { char v_name[25]; char n_name[30]; t_auto car; /* und weitere Komponenten */ }t_person; void einfuegen(t_person *); void ausgeben(t_person *, int); /* Definition globaler Variablen */ int main() { int schleife=1; while (schleife!=0) { t_person person_auto[500]; int auswahl = 0; cout << "Bitte auswaehlen:" << endl << "Daten hinzufuegen , druecken sie 1" << endl << "Daten abrufen, druecken sie 2" << endl << "Um das Programm zu beenden drueckste 3" << endl << "Und bestaetigen Sie mit Enter! "; cin >> auswahl; switch(auswahl) { case 1: { einfuegen(person_auto); } break; case 2: { int zahl = 0; cout << "Welcher Datensatz soll ausgegeben werden?" << endl; cin >> zahl; ausgeben(person_auto, zahl); } break; case 3: { schleife = 0; } break; default: { cout << "Falsche Eingabe"; } break; } } return 0; } /* end main*/ /* weitere Funktionen */ void einfuegen(t_person* person_auto) { char dummy [5]; char land[30]; char stadt[30]; char name[30]; int baujahr; char model[15]; int ps; char v_name[25]; char n_name[30]; cin.getline (dummy, 4); cout << "Bitte Herkunftsland des Autos eingeben!" << endl; cin.getline(land, 30); cout << "Bitte Produktionsstadt des Autos eingeben!" << endl; cin.getline(stadt, 30); cout << "Bitte Hersteller des Autos eingeben!" << endl; cin.getline(name, 30); cout << "Geben Sie nun das Baujahr des Autos ein!" << endl; cin >> baujahr; cin.getline (dummy, 4); cout << "Welches Modell ?" << endl; cin.getline(model, 15); cout << "Nun das Wichtigste, die PS Zahl:" << endl; cin >> ps; cin.getline (dummy, 4); cout << "Ihr Vorname lautet:" << endl; cin.getline(v_name, 25); cout << "Zu guter letzt noch Ihr Nachname:" <<endl; cin.getline(n_name, 30); for(int i = 0; i < 500;i++) { if(i < 500) { strcpy(person_auto[i].car.pkw.land, land); strcpy(person_auto[i].car.pkw.stadt, stadt); strcpy(person_auto[i].car.name, name); person_auto[i].car.baujahr = baujahr; strcpy(person_auto[i].car.model, model); person_auto[i].car.ps = ps; strcpy(person_auto[i].v_name, v_name); strcpy(person_auto[i].n_name, n_name); i++; } else { cout << "Struktur ist voll!!!"; } } } void ausgeben (t_person* person_auto, int zahl) { system("cls"); cout <<"Ihre Angaben"<< endl; cout <<"___________"<< endl; cout <<endl<< endl; cout <<"Herkunftsland: " <<person_auto[zahl].car.pkw.land << endl; cout <<"Produktionsort: " <<person_auto[zahl].car.pkw.stadt << endl; cout <<"Hersteller: " <<person_auto[zahl].car.name << endl; cout <<"Baujahr: " <<person_auto[zahl].car.baujahr << endl; cout <<"Modell: " <<person_auto[zahl].car.model << endl; cout <<"Leistung: " <<person_auto[zahl].car.ps <<"PS" << endl; cout <<"Vorname: " <<person_auto[zahl].v_name << endl; cout <<"Nachname: " <<person_auto[zahl].n_name << endl; cout <<endl<< endl; }Vielen Dank im Vorraus
-
1. Hallo
2. Bitte C/C++ statt den Code-Tags verwenden. Bessere Hervorhebung.
3. Man schreibt voraus mit nur einem r
4. Womit du auch immer aktuell C++ lernst, schmeiss es auf der Stelle weg.
Ausserstd::cinundstd::coutist in diesem Code ALLES C! Von C++ ist so gut wie keine Spur zu sehen ...
fwrite,fread,fopenundfclosesind auch alles C Funktionen. Da wärst du im C Forum besser aufgehoben mit deiner Frage!Falls du wirklich C++ lernen willst, dann empfiehlt man aktuell vor allem diese zwei Bücher:
- Thinking in C++ 1&2 (Auch als gratis PDF verfügbar)
- C++ Primer
Grüssli
-
Hi, danke für die Infos! Habe es im C Forum gepostet. Könnte somit hier gelöscht werden!
-
Also aufgrund der Anzahl der cout / cin würde ich sagen, dass der Code zu 80% C++ ist

auffällig C sind nur "typedef" und "strcpy"...
-
it0101@loggedoff schrieb:
auffällig C sind nur "typedef" und "strcpy"...
... und char-arrays an Stelle von std::string, <string.h> statt <cstring> (oder eben <string>, structs und bearbeitende Funktionen statt Klassen mit Methoden, ein array von t_person statt eines std::vector, ...
-
Ich dachte das C++ eine Multi-Paradgimensprache ist. Bedeutet das nicht, dass gerade der Vorteil darin liegt, dass man die verschiedenen Paradigmen miteinander mischen kann?
Gruß,
Bitshift
-
BitShift schrieb:
Ich dachte das C++ eine Multi-Paradgimensprache ist. Bedeutet das nicht, dass gerade der Vorteil darin liegt, dass man die verschiedenen Paradigmen miteinander mischen kann?
C++ ist eine Multi-Paradigmensprache ... ja
Dies ist ein Vorteil ... ja
Dies hat etwas mit diesem Thread zu tun ... neinAlso habe ich keine Ahnung, worauf du hinaus willst. In C++ verwendet man Filestreams und in C die entsprechenden f-Funktionen.
Grüssli
-
BitShift schrieb:
Ich dachte das C++ eine Multi-Paradgimensprache ist. Bedeutet das nicht, dass gerade der Vorteil darin liegt, dass man die verschiedenen Paradigmen miteinander mischen kann?
Doch, natürlich. Du meinst hier wahrscheinlich prozedural und objektorientiert. Jedoch gibt es viele Dinge, die sich objektorientiert eleganter lösen lassen (Streams, Container, ...). Was solche Sachen betrifft, sollte man in C++ auch deren Möglichkeiten nutzen. Trotzdem besitzt C++ auch viele prozedurale Aspekte, denke man beispielsweise an globale Funktionen etc. Nur sind halt seit C viele rein prozedurale Ansätze durch objektorientierte oder gemischte vertrieben worden.
-
BitShift schrieb:
Ich dachte das C++ eine Multi-Paradgimensprache ist. Bedeutet das nicht, dass gerade der Vorteil darin liegt, dass man die verschiedenen Paradigmen miteinander mischen kann?
Gruß,
BitshiftDas ist nur dann ein Vorteil, wenn man erkennt, wann die Mischung der Paradigmen von Vorteil ist, und wann nicht.
Ansonsten gilt: A fool with a tool is still a fool.