Probleme mit Aufgabe
-
Hi,
danke stimmt. Nur warum soll der name, vorname, stadt, straße ein array sein?
-
a.Name[0] = 'M'; a.Name[1] = 'a'; a.Name[2] = 'x'; a.Name[3] = 0;
-
kann man da nicht einfach nur:
char name;.......
a.name="Max";
schreiben?
-
Hi,
ich habe jetzt mal ein Datensatz erstellt und den Abschnitt zum speichern der Daten als Datei einfach wie vorgegeben reinkopiert. so sieht es jetzt aus:[cpp]# include <iostream>
using namespace std;struct Adresse
{
long int Postleitzahl;
char Stadt[20];
char Straße[20];
};struct dateielement
{
char Name[20];
char Vorname[20];
long int Martikelnummer;
Adresse adresse;
bool Geschlecht;
int Noten[10];
};int main ()
{
char speichername;
int anzahl;
cout<<"Bitte Anzahl eingeben"<<endl;
cin>>anzahl; das muss const int sein, wie bekomm ich das hin?
dateielement datensatz[anzahl];
strcpy(datensatz[0].Name, "Mueller");
strcpy(datensatz[0].Vorname, "Hans");
datensatz[0].Martikelnummer=254781;
datensatz[0].adresse.Postleitzahl=64258;
strcpy(datensatz[0].adresse.Stadt,"Darmstadt");
strcpy(datensatz[0].adresse.Straße,"Darmstaedterstraße");
datensatz[0].Geschlecht=1;
datensatz[0].Noten[0]=5;
datensatz[0].Noten[3]=2;cout << "unter welchem namen speichern ? " << endl;
cin >> speichername;
FILE *stream;
if( (stream = fopen( speichername, "w+b" )) == NULL ) *folgender Fehler:error C2664: 'fopen' : cannot convert parameter 1 from 'char' to 'const char '
{
cout << "The file was not opened" << endl;
return(-1);
}
else
{
cout << "The file was opened" << endl;
fwrite ( &anzahl, sizeof(anzahl), 1, stream);
fwrite ( datensatz, sizeof(datensatz), 1, stream);
if( fclose( stream ) )
cout << "The file was not closed" << endl;
else
cout << "file was closed " << endl;
}return 0;
}[/cpp]Jetzt gibts 2 Probleme, könnt ihr mir da bitte helfen?
-
Hallo
cin>>anzahl; das muss const int sein, wie bekomm ich das hin?
Wenn ein Array keine feste Größe hat, kannst du kein statisiches C-Array nehmen. Entweder reservierst du selber nötoigen Speicher (siehe new), oder du verwendest gleich std::vector. Schau in das Forumeigene Magazin, da gibt es ein Artikel zu den STL-Containern.
if( (stream = fopen( speichername, "w+b" )) == NULL ) folgender Fehler:error C2664: 'fopen' : cannot convert parameter 1 from 'char' to 'const char *'
Die Fehlermeldung ist doch aussagekräftig genug. "Speichername" ist als char definiert. Aber ein einzelnes Zeichen ist wohl kaum ausreichend für einen Dateienamen, also will fopen davon nichts wissen. Du müßtest schon char* verwenden, oder besser gleich std::string und dann auch std::ifstream.
Am besten machst du erstmal ein ordentliches C++ Tutorial, dieser C/C++ Mischmasch ist schlecht.
bis bald
akari
-
Danke jetzt funktioniert es.
Teil 1+2 hab ich ja jetzt in main().
1. Als erstes muss die Anzahl der Personen eingegeben ( 0 < Anzahl <=100 ) und einige Datensätze erstellt werden.
2. Anschließend werden die Daten als Datei abgespeichert.Als nächstes soll folgendes gemacht werden:
3. Danach sollen in einem seperaten Programm alle Daten eingelesen werden.
4. In diesem Programm werden nun alle Datensätze nach den angegebenen Bedingungen sortiert.und ausgegeben.
Bei der Ausgabe sollen zuerst die Matrikelnummer, anschließend der Nachname, der Wohnort sowie die Anzahl der bestandenen Fächer ausgegeben werden.
Ausgabebeispiel:
456321 Schmidt Darmstadt 5 bestandene Leistungsnachweise
456478 Mueller Darmstadt 3 bestandene Leistungsnachweise
573452 Streber Darmstadt 10 bestandene Leistungsnachweise
598765 Looser Darmstadt 1 bestandener Leistungsnachweiswie soll denn jetzt das neue Programm aussehen? wie kann ich es einführen?
Gruß Christian
-
Ich habe jetzt das Einlesen erst mal in main geschrieben.
Er zeigt mir in Zeile 66 einen Fehler an und in Zeile 50 nicht, könnt ihr mir bitte sagen warum und wie ich den Fehler beheben kann.# include <iostream> using namespace std; struct Adresse { long int Postleitzahl; char Stadt[20]; char Straße[20]; }; struct dateielement { char Name[20]; char Vorname[20]; long int Martikelnummer; Adresse adresse; bool Geschlecht; int Noten[10]; }; int main () { char* speichername= "datensatz1"; const int anzahl=100; dateielement datensatz[anzahl]; strcpy(datensatz[0].Name, "Mueller"); strcpy(datensatz[0].Vorname, "Hans"); datensatz[0].Martikelnummer=254781; datensatz[0].adresse.Postleitzahl=64258; strcpy(datensatz[0].adresse.Stadt,"Darmstadt"); strcpy(datensatz[0].adresse.Straße,"Darmstaedterstraße"); datensatz[0].Geschlecht=1; datensatz[0].Noten[0]=5; datensatz[0].Noten[3]=2; FILE *stream; if( (stream = fopen( speichername, "w+b" )) == NULL ) { cout << "The file was not opened" << endl; return(-1); } else { cout << "The file was opened" << endl; fwrite ( &anzahl, sizeof(anzahl), 1, stream); fwrite ( datensatz, sizeof(datensatz), 1, stream); if( fclose( stream ) ) cout << "The file was not closed" << endl; else cout << "file was closed " << endl; } if( (stream = fopen( speichername, "rb" )) == NULL ) { cout << "The file was not opened" << endl; return(-1); } else { cout << "The file was opened" << endl; fread (&anzahl, sizeof(anzahl), 1, stream); [b]error C2664: 'fread' : cannot convert parameter 1 from 'const int *__w64 ' to 'void *'[/b] cout << " Anzahl "<< anzahl << endl; fread ( datensatz, sizeof(datensatz), 1, stream); } return 0; }
-
Du hast 'anzahl' als "const int" deklariert, also bist du nicht berechtigt, diesen Wert zu ändern (und der fread()-Aufruf will den Wert ändern und wird deshalb vom Compiler mit Recht als Fehler eingestuft).
-
Vielleicht solltest du dir mal 2 Tage Zeit nehmen und ein C++-Tutorial durcharbeiten...
-
Hi,
ich habe mir jetzt noch mal einiges durchgelesen, was für das Programm interessant sein könnte und es fertig geschrieben.
Hab 2 Programme geschrieben.
-1. für die Eingabbe und zum speichern als Datei
-2. einlesen und sortierenHab nur das Problem, dass beim 2ten Programm die Datei, die ich im ersten erstellt habe nicht gefunden wird.
Stück aus dem 1.Programm:
cout << "unter welchem Namen speichern? "<<endl; cin >> Speicher; if ( (stream = fopen(Speicher, "wb")) == NULL) { cout << "Datei konnte nicht geöffnet werden " << endl; return -1; } else { cout<<"Die Datei konnte geöffnet werden"<<endl;; fwrite(&Anzahl, sizeof(Anzahl), 1, stream); fwrite(daten, sizeof(datensatz), Anzahl, stream);2.Programm:
if ( (stream = fopen(Speicher, "rb")) == NULL) { cout << "Datei konnte nicht geöffnet / gefunden werden " << endl; return -1; } else { fread(&Anzahl, sizeof(Anzahl), 1, stream); fread(daten, sizeof(datensatz), Anzahl, stream);wenn ich jetzt z.b die Daten vom ersten Programm unter data speichere, kann es das zweite bei Eingabe von data nicht öffnen.
Hoffe ihr könnt helfen
Gruß Christian
-
Badestrand schrieb:
Vielleicht solltest du dir mal 2 Tage Zeit nehmen und ein C++-Tutorial durcharbeiten...
Btw: Du mischt grad C und C++ durcheinander. Statt fread und fwrite nimm lieber Filestreams und die << und >> Operatoren..
-
Hallo
THX 1138 schrieb:
Badestrand schrieb:
Vielleicht solltest du dir mal 2 Tage Zeit nehmen und ein C++-Tutorial durcharbeiten...
Btw: Du mischt grad C und C++ durcheinander. Statt fread und fwrite nimm lieber Filestreams und die << und >> Operatoren..
Bei dem Punkt waren wir schon einmal ganz am Anfang.
chrische
-
Sry hab nicht alles gelesen
-
Hallo
Das war ja auch kein Vorwurf, sondern nur ein Bemerkung.
chrische