000
06.11.2005, 20:09
Deathstar
|
Hallo Miteinander,
ich habe angefangen von C auf C++ umzusteigen, doch bei mir hakts grad etwas:
#include <cstdlib> #include <iostream>
using namespace std;
struct datum{ int tag; int monat; int jahr; };
void getdate(datum *temp){ cout << "Day: "; cin >> temp.tag; cout << "Month: "; cin >> *temp.monat; cout << "Year: "; cin >> *temp.jahr; } void showdate(datum temp){ cout << temp.tag << "." << temp.monat << "." << temp.jahr << endl; }
int main(int argc, char *argv[]) { datum temp; getdate(&temp); showdate(temp); system("PAUSE"); return EXIT_SUCCESS; }
Sinn soll sein: Die Werte Tag, Monat und Jahr in der ersten Funktion einzulesen und in der nächsten damit zu arbeiten.
Aber irgendwo ist da noch ein Fehler, wer weiß da bescheid?
Danke euch.
--
|
|
Profil || Suche
|
001
06.11.2005, 20:24
HammerBlade
|
Du hast void getdate(datum *temp) so definiert, dass temp ein Pointer ist, aber du benutzt es nicht so.
Du musst das entwerder auch als Pointer benutzen ...
void getdate(datum *temp) { cout << "Day: "; cin >> temp->tag; cout << "Month: "; cin >> temp->monat; cout << "Year: "; cin >> temp->jahr; } ... oder es richtig dereferenzieren ...
void getdate(datum *temp) { cout << "Day: "; cin >> (*temp).tag; cout << "Month: "; cin >> (*temp).monat; cout << "Year: "; cin >> (*temp).jahr; } Die Klammern um das *temp sind wichtig, da der Punkt-Operator eine höhere Präzedenz als der Stern-Operator/Dereferenzierungs-Operator hat.
--
"Mit C++ (noch besser mit C) kann man sich _sehr_ leicht in den Fuss schiessen." - theDon Auspack und freu! - Auszug aus einer, aus dem japanischen übersetzten, Bedienugsanleitung für ein Spielzeugaquarium. -- Photon Audio Player | Majestic42.net | How To Ask Questions The Smart Way
Dieser Beitrag wurde am 06.11.2005 um 20:29 von HammerBlade bearbeitet.
|
|
Profil || Suche
|
002
06.11.2005, 20:28
KhanRKerensky
|
Der Fehler steckt wohl in getdate. Du übergibts dort nen pointer. Der Zugriff auf die Elemtente muss damit über -> geschehn. So:
void getdate(datum *temp){ cout << "Day: "; cin >> temp->tag; cout << "Month: "; cin >> temp->monat; cout << "Year: "; cin >> temp->jahr; } Statt dem temp->tag könnte man auch (*temp).tag nehmen, dann müssen da aber auch die Klammern hin soweit ich weiß.
/edit Ach menno. Zu lahm.
--
"[...] you're going to burn in a very special level of Hell. A level they reserve for child molesters and people who talk at the theater." - Book
Dieser Beitrag wurde am 06.11.2005 um 20:28 von KhanRKerensky bearbeitet.
|
|
Profil || Suche
|
003
06.11.2005, 20:56
Deathstar
|
Hey Jungs, besten Dank. Ich bastel dann mal weiter und wenn wieder was ist, poste ich das als Anhang wieder besser.
--
|
|
Profil || Suche
|
004
06.11.2005, 21:12
CN
|
und wo genau steckt da jetzt der umstieg von c auf c++? erkenne ich nich ganz das is ein c programm mit c++ headern, mehr nich
mal ein vorschlag der auch von c++ gebrauch macht:
#include <iostream> #include <iomanip>
using namespace std;
class datum { int d_, m_, y_;
public: datum(); datum(int, int, int); friend ostream &operator <<(ostream &, const datum &); };
datum::datum() { cout << "day: " << endl; cin >> d_; cout << "month: " << endl; cin >> m_; cout << "year: " << endl; cin >> y_; }
datum::datum(int d, int m, int y) { d_ = d; m_ = m; y_ = y; }
ostream &operator <<(ostream &out, const datum &d) { out << setw(2) << setfill('0') << d.d_ << "." << setw(2) << setfill('0') << d.m_ << "." << d.y_; return out; }
int main() { datum d; cout << d << endl; } nur mal so ne anregung was c++ so alles kann, "cout statt printf" is nich alles. is klar dass dus lieber allein machen willst
--
Dieser Beitrag wurde am 06.11.2005 um 21:17 von CN bearbeitet.
|
|
Profil || Suche
|