006
07.03.2011, 16:03 Uhr
0xdeadbeef
Gott (Operator)
|
Wenn das gesuchte Zeichen nicht gefunden wird, wie es bei der Eingabe von "20:32" hier der Fall ist:
C++: |
trenner = l.find("'");
|
gibt std::string::find std::string::npos zurück, welches als static_cast<std::string::size_type>(-1) definiert ist. Nach Umrechnung Modulo 2^Breite, wie es der Standard vorschreibt, kommt dabei die größte Zahl raus, die in einen std::string::size_type passt. Plattformabängig ist davon auszugehen, dass das derzeit entweder 2³² - 1 oder 2⁶⁴ - 1 ist. Wenn du das dann in einen unsigned short von 16 Bit Breite stopfst, kommt dabei halt 65535 raus - dieses ist ungleich Null, dementsprechend wird das hier:
C++: |
if (!trenner) trenner = l.find(":"); if (!trenner) { cerr << "Falsches Eingabeformat! Daten bitte im Format MM'SS oder MM:SS eingeben!"; return 0; }
|
gar nicht erst ausgeführt. Schlussendlich wird mit trenner == 65535
zu 65534, und damit hast du deine Ausgabe. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra Dieser Post wurde am 07.03.2011 um 16:04 Uhr von 0xdeadbeef editiert. |