019
19.01.2016, 05:50 Uhr
Hans
Library Walker (Operator)
|
Hi,
Zitat von ~JohnDoe: |
Meinte nicht a1 und b2, sondern wollte case 1-16 und case s, case q und case m haben.
|
okay. Dann musst Du aber trotzdem zuerst Strings annehmen und diese dann daraufhin überprüfen, ob sie Ziffern oder Buchstaben enthalten, und diese anschliessend auswerten. Das würde etwa so aussehen: * Eingabe von Tastatur in einen String einlesen * String überprüfen, ob er Ziffern oder Buchstaben enthält. * Wenn Buchstaben, dann case Buchstaben; - vorher ist aber eine Umwandlung (Konvertierung) von string nach char nötig. * Wenn Ziffern, dann von Ziffernstring in Zahl umwandeln (Funktion stoi) und anschliessend case Zahlkonstante.
Zitat von ~f.th.: |
Es gab auch schon OS vor Windows. Die hatten so "seltsame" Grenzen. Damals hatten die 8086 CPU z.B. 64kB Speichersegmente. Nur falls euch mal so etwas älteres über den Weg laufen sollte. Windows vor 3.0 kämpften ja auch noch damit.
|
Okay, dann war also gemint, dass der Compiler maximal 127 verschiedene cases verarbeiten konnte. Gut, hab ich jetzt verstanden. :-) - Hab deshalb jetzt mal im Handbuch von Turbo-C++ 3.0 von 1992 nachgesehen. Da steht drin, das dieser Compiler keine maximale Obergrenze von case-Werten hat, solange genügend Speicherplatz zur Verfügung steht. Aber im C-89-Standard (Abschnitt oder Kapitel 3.6.4.2) gibt es wohl diese Möglichkeit, wobei es den Compilerherstellern überlassen bleibt (blieb?), wie sie das handhaben. Steht so jedenfalls im Turbo-C++ Handbuch. Ältere Compiler hab ich leider nicht. Zwar ältere Computer, aber dafür hab ich keine Compiler. Aber wenn man wegen der 64KB-Grenze mal so überlegt, dann könnte so eine Obergrenze einen Sinn ergeben... - Andrerseits laufen die verschiedenen cases alle auf sowas hinaus:
Code: |
switch(eingabe) 0038 83 7D FC 01 cmp dword ptr [ebp-0x4],0x00000001 003C 74 22 je L$3 003E 83 7D FC 00 cmp dword ptr [ebp-0x4],0x00000000 0042 74 08 je L$2 0044 83 7D FC FF cmp dword ptr [ebp-0x4],0xffffffff 0048 74 2A je L$4 004A EB 2A jmp L$5
|
Das sind in diesem Fall 3 cases, deren Code an den Labeln L$2, L$3 und L$4 steht. Bei L$5 steht der Code der default-Anweisung. Und es ist 32-Bit Code. Bei 16-Bit Code müssten die cmp-Befehle 2 Byte weniger haben, sofern an den Befehlen selbst nicht schon irgendwas optimiert ist. Also wäre es eine Frage, wie lang der Code der einzelnen cases ist, um auch bei 64KB Programme mit mehr als 127 cases zu schreiben. Bleibt am Ende halt die Frage, ob man so viele cases wirklich braucht?
Hans -- Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung. Dieser Post wurde am 19.01.2016 um 05:51 Uhr von Hans editiert. |