Wecker
-
Hi,
ich möchte im Rahmen einer Hausaufgabe einen Wecker mit C++ Programmieren... funktioniert nur nicht wirklich.
Header:
#ifndef _WeckerH_ #define _WeckerH_ #include <ctime> #include <time.h> #include <windows.h> char weckzeit[80]; class Wecker { public: void Wecken() { time_t now = time(0); char timestamp[80]; strftime(timestamp, 80, "%H:%M", localtime(&now)); if (timestamp == weckzeit) { for (int i = 0;i >= 1000;i++) { Beep(i, 100); } } } }; #endif#include <iostream> #include "Wecker.h" using namespace std; int main() { Wecker testwecker; cout<<"------Wecker------"<<endl<<endl; cout<<"Weckzeit eingeben :"<<endl; cin>>weckzeit; while (1) { testwecker.Wecken(); Sleep (1); } return 0; }Es lässt sich zwar so compilen doch der Wecker funktioniert nicht :(.
Weiß Jemand wie der Code umgeschrieben werden muss damit es funktioniert?
-
C-Strings vergleicht man mit strcmp:
if ( strcmp( timestamp, weckzeit ) == 0 ) ... // GleichOder, da du ja augenscheinlich C++ benutzt, du benutzt "richtige" Strings. Schau dir dazu im Tutorial deines Vertrauens mal std::string an

-
Danke für die schnelle Antwort... "richtige" strings? Muss ich doch auch benutzen oder?
-
Chrises schrieb:
"richtige" strings? Muss ich doch auch benutzen oder?
Zwingen tut dich keiner. Die sind halt um einiges komfortabler, man kann dann z.B. auch mit == vergleichen

-
Ok komfortabler ist es sicherlich. Funktionieren tut der Wecker trotzdem nicht

-
Dann lass dir mal "timestamp" und "weckzeit" ausgeben, ob die auch das richtige Format usw haben.
-
printf(timestamp); Sleep(2000); printf(weckzeit); Sleep(2000); if ( strcmp( timestamp, weckzeit ) == 0 )Ausgabe stimmt.. der Vergleich funktionirt anscheinent nicht.. strcmp (char*, char*) sollte doch aber stimmen oder?
-
Badestrand schrieb:
Chrises schrieb:
"richtige" strings? Muss ich doch auch benutzen oder?
Zwingen tut dich keiner. Die sind halt um einiges komfortabler, man kann dann z.B. auch mit == vergleichen

Aber er muss zunächst einem std::string Objekt den erzeugten C-String zuweisen. Und da er sowieso nur einmal vergleicht wäre es wohl doch komfortable keine std::strings zu nutzen

Warum ist das eigentlich im WinAPI Forum bzw wird windows.h inkludiert wenn es doch eigentlich eine Sache der Standardbibliothek ist und warum zum Teufel inkludierst du <ctime> und <time.h> ? Böse Sache das^^
Und die for-Schleife ist auch falsch.
Du initialisierst i mit 0 und loopst solange wie i größer gleich 1000 ist.
Nur ist es das schon ab Anfang nicht denn, wie gesagt, hast du i mit 0 initialisiert.Hier mal wie du es eher machen solltest, warum du die Weckzeit als String und nicht als time_t speicherst ist mir absolut unklar.
#ifndef _WeckerH_ #define _WeckerH_ #include <ctime> class Wecker { public: void Wecken() { time_t timestamp = time(0); if(timestamp = weckzeit) { for (int i = 0;i <= 1000;i++) { Beep(i, 100); } } } private: time_t weckzeit; }; #endif //_WeckerH_So musst da natürlich weckzeit als time_t setzen, schau dir dazu das hier an
http://www.cplusplus.com/reference/clibrary/ctime/mktime/
-
Besser:
... time_t timestamp = time(0); if(timestamp >= weckzeit) //Bedingung geändert ...
-
Vielen Danke^^. For-Schleife war einfach falsch. Icemax ich werde mir deinen Text zu Herzen nehmen und absofort besser Programmieren xD. Warum ich soviel includet habe? Dachte mir besser zu viel als zu wenig.

Gruß Chrises
-
Chrises schrieb:
Vielen Danke^^. For-Schleife war einfach falsch. Icemax ich werde mir deinen Text zu Herzen nehmen und absofort besser Programmieren xD. Warum ich soviel includet habe? Dachte mir besser zu viel als zu wenig.

Gruß Chrises
Das Problem ist halt nur:
<ctime> bindet man normal unter C++ ein
<time.h> ist nur noch zur Kompatibilität da.Also da lieber zu wenig als zu viel includen, wenn was fehlt sagts dir sowieso der Compiler
