Wochentag ausgeben
-
Skym0sh0 schrieb:
std::string wochentage[] = {"Sonntag", "Montag", "Dienstag", ...};
Hier würde ich sogar ausnahmsweise
const char*
nehmen.
-
enum Wochentag { Montag, Dienstag, Mittwoch, Donnerstag, Freitag, Samstag, Sonntag }; int main() { std::map<Wochentag,std::string> wochentage; wochentage[Montag] = "Montag"; wochentage[Dienstag] = "Dienstag"; wochentage[Mittwoch] = "Mittwoch"; wochentage[Donnerstag] = "Donnerstag"; wochentage[Freitag] = "Freitag"; wochentage[Samstag] = "Samstag"; wochentage[Sonntag] = "Sonntag"; cout << "Heute ist " << wochentage[Montag]; }
Aber ja, so eine map finde ich eigentlich auch schöner.
-
silent_max schrieb:
cout << pUhrzeit -> tm_wday << "\n"; break;
Wenn ich mich aber jetzt für den Fall 3, also für den Wochentag entscheide, kommt für Montag eine 1 und nicht "Montag".
tm_wday ist ja auch eine int-Variable.
silent_max schrieb:
Ich habe schon versucht, durch enum die Wochentage aufzuzählen und auszugeben. Nach #include <iostream>
enum Wochentag {Sonntag=0, Montag=1, Dienstag=2, Mittwoch=3, Donnerstag=4, Freitag=5, Samstag=6}
Und in case 3:
cout << pUhreit -> tm_wday << Wochentag << "\n";
Aber da kommt bei mir die Fehlermeldung:
Error: Der Typname ist nicht zulässig
Welchen Denkfehler habe ich??
Wochentag ist kein Ausdruck sondern ein Typ. An der Stelle muss aber ein Ausdruck stehen.
silent_max schrieb:
P.S.: In "Der C++ Programmierer" steht auf S. 881, was alles die Header <ctime>
beinhaltet. Bei "int tm_wday" steht "Wochentag seit Sonntag 0...6". Aber ich will nicht 0 ... 6 ausgeben sondern Sonntag ... Samstag. Wie geht das??Du könntest diese Zahl als Index für ein Array von Zeichenketten verwenden.
const char* wochentag_name(int index) { assert(0<=index && index<7); static const char* const namen[] = { "Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag" }; return namen[index]; } ::: cout << wochentag_name(pUhrzeit->tm_wday) << '\n';
-
Was ist denn "assert" für ein Befehl??
Bei mir ist sowohl "assert" als auch im main() bei
cout << wochentag_index(pUhrzeit->tm_wday) << "\n"
wochentag_index rot interringelt....
-
Hä, wochentag_index hat krümelkacker doch gar nicht geschrieben.
-
out schrieb:
Hä, wochentag_index hat krümelkacker doch gar nicht geschrieben.
Sorry ... habe ich total überlesen...
Für "assert" muss ich ja
#include <assert.h>
schreiben...
-
silent_max schrieb:
Für "assert" muss ich ja
#include <assert.h>
Ne,
#include <cassert>
-
out schrieb:
silent_max schrieb:
Für "assert" muss ich ja
#include <assert.h>
Ne,
#include <cassert>
Wo ist der Unterschied zwischen
#include<assert.h>
und
#include<cassert>
??
Gruß
Max
Edit: Ich habe <assert.h> mit eingebunden und es hat funktioniert...
-
Bei
xyz.h
liegen die Definitionen im globalen Namensraum. Beicxyz
liegen die Definitionen im Namensraumstd
.
-
silent_max schrieb:
Wo ist der Unterschied zwischen
#include<assert.h>
...
Kein Header der C++ Standardbibliothek hat eine Dateiendung, der Header mit der Dateiendung .h ist ein C-Header, das andere ein C++ Header (in diesem Fall genauer gesagt: ein C-Kompatibilitätsheader für C++).
So wie man unter C++ auch nicht <time.h> sondern <ctime> verwenden sollte.
-
Ok...
-
asc schrieb:
Kein Header der C++ Standardbibliothek hat eine Dateiendung, der Header mit der Dateiendung .h ist ein C-Header, das andere ein C++ Header (in diesem Fall genauer gesagt: ein C-Kompatibilitätsheader für C++).
So wie man unter C++ auch nicht <time.h> sondern <ctime> verwenden sollte.
Eine standardkonforme Standardbibliothek muss auch time.h bereitstellen.
For compatibility with the C standard library and the C Unicode TR, the C++ standard library provides
the 25 C headers, as shown in Table 154.[...]
[ Example: The header <cstdlib> assuredly provides its declarations and definitions within the namespace
std. It may also provide these names within the global namespace. The header <stdlib.h> assuredly
provides the same declarations and definitions within the global namespace, much as in the C Standard. It
may also provide these names within the namespace std. — end example ]Es geht hier im Forum das Gerücht umher, dass es die .h-Varianten nicht gäbe.
-
silent_max schrieb:
P.S.: In "Der C++ Programmierer" steht auf S. 881, was alles die Header <ctime>
beinhaltet. Bei "int tm_wday" steht "Wochentag seit Sonntag 0...6". Aber ich will nicht 0 ... 6 ausgeben sondern Sonntag ... Samstag. Wie geht das??Hallo Max,
In der C++-Bibliothek gibt es eine Facette namens time_put. Diese ist für die Ausgabe von Zeit und Datum zuständig.
Die eigentliche formatierte Ausgabe erledigt die Methode time_put::put. Vonput
gibt es zwei Varianten die neben den Parametern, den die meisten Facetten besitzen, die Parameter std::tm und eine Formatangabe besitzen.
Die genaue Beschreibung der Formatangabe - bzw. was da alles wie ausgegeben werden kann - findest Du unter strftime.Demo:
#include <iostream> #include <locale> // std::time_put<> #include <ctime> // std::tm usw. int main() { using namespace std; cout.imbue( locale("german") ); // Datum&Wochentag bitte in deutsch time_t jetzt_ = time( nullptr ); // aktulle Zeit tm dateTime = *localtime( &jetzt_ ); // Zeit in struct tm konvertieren const char pattern[] = "%H:%M %x %A"; // Stunde:Minute=%H:%M Datum=%x Wochentag=%A const char* patternEnd = pattern + (sizeof(pattern)/sizeof(pattern[0])) - 1; typedef time_put< char > TimePut; use_facet< TimePut >( cout.getloc() ) .put( TimePut::iter_type( cout ), cout, cout.fill(), &dateTime, pattern, patternEnd ); cout << endl; return 0; }
Ausgabe (z.B.):
20:13 10.12.2012 Montag
Das kann man auch alles schön verpacken, so wie es hier mit dem Manipulator now (2.Listing) schon gezeigt wurde.
:xmas2: Werner