konvertierungsprobleme von z.b.String[2] zu String[6]
-
statt
array[i].Pruefungsname="leer";
das hier:
strcpy(array[i].Pruefungsname, "leer")
----------------------------------------------
oder noch besser:struct Noten_t { std::string pruefungsname; float note; float gewichtung; }
denn dann kannst du Stringliterale wieder einfach an pruefungsname zuweisen.
PS: das typedef kannste dir in C++ sparen
-
Windalf schrieb:
sprintf(array[i].Pruefungsname,"%s","leer");
sprintf ist hier wohl unangebracht
-
@Shade
wiso?
-
Windalf schrieb:
@Shade
wiso?weil es lahm ist
und strcpy exakt für 'strings kopieren' gemacht wurdealternativ wäre auch memcpy recht praktisch
-
weil es lahm ist
und strcpy exakt für 'strings kopieren' gemacht wurdealternativ wäre auch memcpy recht praktisch
ach so das ist in der tat ein argument...
-
Cool danke....das hat soweit geklappt.
Ich hab noch eine andere Frage:
Wie kann ich nun dieses Array sprich das Array mit der kompletten Struktur abspeichern oder durch das auslesen einer binärdatei wieder füllen.
Ich habe vor eine Zeiger auf das array an eine Funktion die das laden aus einer Datei.dat (binär) übernimmt als call-by-reference zu übergeben. dann soll diese Funktion die Daten aus der Datei auslesen und die schön in das array per Zeiger übertragen....allerdings hab ich kein schimmer wie die Dateien zunächst aus dem stream ankommen, geschweige denn wie ich sie sortiert in das array bekomme.
die fscanf-Funktion verlangt beipielsweise drei Parameter (stream,format,ziel). Irgenweie scheiterts einfach an der Vorstellung wie die Daten da drin liegen usw.
SIcherlich hängt das davon ab, wie ich sie mit einer anderen Funktion z.b speicherDaten() diese abspeichere.
Kann mir jemand weiterhelfen und mir eine kleine Unterrichtsstunde oder Beipiel in der Hinsicht geben?---
Wäre toll......
Gruß
-
dreamworker6981 schrieb:
Cool danke....das hat soweit geklappt.
Ich hab noch eine andere Frage:
Wie kann ich nun dieses Array sprich das Array mit der kompletten Struktur abspeichern oder durch das auslesen einer binärdatei wieder füllen.
Ich habe vor eine Zeiger auf das array an eine Funktion die das laden aus einer Datei.dat (binär) übernimmt als call-by-reference zu übergeben. dann soll diese Funktion die Daten aus der Datei auslesen und die schön in das array per Zeiger übertragen....allerdings hab ich kein schimmer wie die Dateien zunächst aus dem stream ankommen, geschweige denn wie ich sie sortiert in das array bekomme.
die fscanf-Funktion verlangt beipielsweise drei Parameter (stream,format,ziel). Irgenweie scheiterts einfach an der Vorstellung wie die Daten da drin liegen usw.
SIcherlich hängt das davon ab, wie ich sie mit einer anderen Funktion z.b speicherDaten() diese abspeichere.
Kann mir jemand weiterhelfen und mir eine kleine Unterrichtsstunde oder Beipiel in der Hinsicht geben?---
Wäre toll......
Gruß
Das sollte in etwa so gehen:
#include <iostream> #include <iomanip> #include <fstream> using namespace std; struct Noten_t { std::string pruefungsname; float note; float gewichtung; }; ofstream& operator<<(ofstream& o, const Noten_t& rhs); void write(const Noten_t* p, int count); int main( int argc, char* argv[] ) { Noten_t array[2]; array[0].pruefungsname = "interpreter"; array[0].note = 1; array[0].gewichtung = 1; array[1].pruefungsname = "foo"; array[1].note = 5; array[1].gewichtung = 1; write(array, 2); return 0; } void write(const Noten_t* p, int count) { ofstream writer("test.txt", ios::trunc | ios::binary); for(int i=0; i< count; i++) writer << p[i]; } ofstream& operator<<(ofstream& o, const Noten_t& rhs) { o << rhs.pruefungsname.c_str() << endl; o << rhs.gewichtung << endl; o << rhs.note << endl; o << "--------------------" << endl; return o; }
Einlesen kannste mit ifstream. Da wir hier im C++ Forum sind: Finger weg von scanf, fprintf und co
-
doppelpost
-
Windalf schrieb:
sprintf(array[i].Pruefungsname,"%s","leer");
Man kann es aber auch umständlich machen
warum nicht gleich so:sprintf(array[i].Pruefungsname, "leer");
-
Horst2 schrieb:
Windalf schrieb:
sprintf(array[i].Pruefungsname,"%s","leer");
Man kann es aber auch umständlich machen
warum nicht gleich so:sprintf(array[i].Pruefungsname, "leer");
ist trotzdem langsam, siehe Shades Post.
(s)printf und co sind ziemlich langsam und die Implementierungen relativ groß, wenn man die Benutzung umgehen kann, sollte man das auch tun.
Aber btw. ist dass das C++ Forum
@dreamworker6981
Wenn du C programmierst, warum fragst du nicht im C Forum?
-
@Horst2
Ich bin davon ausgegangen das er da nicht immer "leer" reinschreiben will sondern eventuell etwas was sich erst während des programmablaufs ergibt... um dann eventuelle fragen vorzubeugen hab ichs halt gleich so geschrieben...