• Liebe User, bitte beachtet folgendes Thema: Was im Forum passiert, bleibt im Forum! Danke!
  • Hallo Gemeinde! Das Problem leidet zurzeit unter technischen Problemen. Wir sind da dran, aber das Zeitkontingent ist begrenzt. In der Zwischenzeit dürfte den meisten aufgefallen sein, dass das Erstellen von Posts funktioniert, auch wenn das Forum erstmal eine Fehlermeldung wirft. Um unseren Löschaufwand zu minimieren, bitten wir euch darum, nicht mehrmals auf 'Post Reply' zu klicken, da das zur Mehrfachposts führt. Grußworte.

c++ probelmechen

RaUpE-8472-

Guest
ich habe die aufgabe eine uhr zu generieren, bei der angezeigt wird wie die sekunden hochgezählt werden. das habe ich bisher geschirben:


#include <iostream.h>
#include <iomanip.h>
#include <time.h>
#include <conio.h>

class CUhrZeit
{
private:
int stunde;
int minute;
int sekunde;

public:
CUhrZeit ();
~CUhrZeit ();
bool setzeZeit (int h, int m, int s);
void plusSekunde ();
void Zeitausgeben ();
};

CUhrZeit::CUhrZeit ()
{
}

CUhrZeit::~CUhrZeit ()
{
}

bool CUhrZeit::setzeZeit (int h, int m, int s)
{
if (h >=23 || h<=0 || m >= 59 || m<=0 || s>=59 || s<=0)
{
return false;
}
else
{
stunde =h;
minute=m;
sekunde=s;
return true;
}
}

void CUhrZeit::Zeitausgeben ()
{
cout << setfill ('0') << setw (2) << stunde << ":";
cout << setw (2) << minute << ":";
cout << setw (2) << sekunde;
}

void CUhrZeit::plusSekunde ()
{
if (sekunde ==60)
{
sekunde =0;
minute = minute + 1;
}

if (minute ==60)
{
minute =0;
stunde = stunde +1;
}

if (stunde ==24)
{
stunde = 0;
}
}

void main ()
{
int h, m, s;
time_t t0, t1;
CUhrZeit Zeit;

cout <<"Bitte eine Stunde eingeben: ";
cin >> h;
cout <<"Bitte eine Minute eingeben: ";
cin >> m;
cout <<"Bitte eine Sekunde eingeben: ";
cin >> s;

t0=time(NULL);
while (true)
{
t1=time(NULL);
if (t1 != t0)
{
Zeit.plusSekunde ();
gotoxy (10,10);
Zeit.Zeitausgeben();
t0=t1;
}

}
}


der zeigt mir aber imm am ende schwachsoinn an, und ich peil ent wo mein denkfehler ist. ich weiss der konstruktor und destruktor machen keinen sinn, wir sollen die der vollständigkeithalber trotzdem mit aufnehmen.


me c++ newb

wär supi wenn mir einer auf die sprünge hilft
 
Mitglied seit
18.07.2001
Beiträge
2.152
Reaktionen
2
Ort
Nürnberg
Auaaaaaaaaaaaaaaaaaaaaa

falsch:
#include <iostream.h> // ausser du arbeitest unter nem uralten compiler :)
#include <iomanip.h>
richtig:
#include <iostream>
#include <iomanip>
using namespace std;


falsch:
~CUhrZeit (); // das macht man hoechstens wenn man weis was man tut aus performancegruenden um ne vtable zu sparen fuer superkrasse optimierung
richtig:
virtual ~CUhrZeit (); // dann funktioniert das aufraeumen auch sauber bei abgeleiteten klassen

man sollte eigentlich alle funktionen virtual machen ausser man hat nen guten grund dagegen



so... ich werf mal compiler an und schau was schief laeuft
 

RaUpE-8472-

Guest
thx

bin erstes jahr ausbildung zum systemintegrator und hab mit AE nix am hut

entschuldigt meine blödheit 8[
 
Mitglied seit
18.07.2001
Beiträge
2.152
Reaktionen
2
Ort
Nürnberg
was soll
gotoxy (10,10);
machen?? ich hab das mal rausgeloescht. auf jedenfall wann soll die schleife zu ende gehn?

ps: fuer endlosschleifen kann man noch folgendes verwenden:

for(;;)
{
bla();
}



ps: was soll das prog eigentlich tun?
 

RaUpE-8472-

Guest
danke^^

so hab jetzt die methode setzeZeit vor der while schleife in der main ausgeführt. jetzt kriegt er auch die richtigen werte. aber warum zählt das scheiss ding nicht?
 
Mitglied seit
18.07.2001
Beiträge
2.152
Reaktionen
2
Ort
Nürnberg
ich wuerde mal sagen du initialisierst die variablen fuer sekunde stunde usw. nicht
 
Mitglied seit
18.07.2001
Beiträge
2.152
Reaktionen
2
Ort
Nürnberg
man initialisiert uebrigens jede variable im konstruktor damit genau sowas nicht passiert

CUhrZeit::CUhrZeit ()
{
stunde = 0;
minute = 0;
sekunde = 0;
}
 
Mitglied seit
18.07.2001
Beiträge
2.152
Reaktionen
2
Ort
Nürnberg
ps: deine funktion CUhrZeit::plusSekunde() macht exakt garnix, wenn nicht gerade sekunde/minute oder stunde ueberlaeuft
 

Observator

Guest
Und das hier ist der Grund dafür:
if (h >=23 || h<=0 || m >= 59 || m<=0 || s>=59 || s<=0)
{
return false;
}
Da wird die Zeitangabe nicht akzeptiert nicht nur, wenn h>23 sondern auch wenn h==23 ist.
Die ganzen = müssen weg.
 

killerchicken_inaktiv

Guest
bitte? ich mach das grad in der schule, das ist absolut sinnlos. die syntax ist scheiße und die ide ist kacke...
 
Oben