Switch Anweisung Ausgabe
-
Enfi schrieb:
meine while schleife die ich eben dazu geschrieben habe lief leider endlos lang

#include <iostream> using namespace::std; int main() { int a; char i; cout << "Eingabe: "; while(cin >> i) { switch(i) { case '1' : a=1; break; case '2' : a=2; break; case '3' : a=3; break; case '4' : a=4; break; case '5' : a=5; break; case '6' : a=6; break; case '7' : a=7; break; case '8' : a=8; break; case '9' : a=9; break; case 'a' : a=10; break; case 'b' : a=11; break; case 'c' : a=12; break; case 'd' : a=13; break; case 'e' : a=14; break; case 'f' : a=15; break; default : i=0; } cout<<"hex: "<<i<<" dec: "<<a<<endl; } }Zum ordnungsgemäßen Abbrechen drücke die auf Deinem System übliche Tastenkombination, die das Datei-Ende-Zeichen erzeugt oder den Eingabestrom abbricht. Bei Windows isses Strg+Z.
-
mh das funktioniert leider nicht:
Eingabe:
11 a fAusgabe:
hex: 1 dec: 1
hex: 1 dec: 1
hex: a dec: 10
hex: f dec: 15sollte eigentlich bei der Ausgabe so aussehen:
hex: 11 a f
dec: 36
quasi dec zusammengezählt und hex einzeln aber in einer zeile
-
#include <iostream> using namespace::std; int main() { int a; char i; cout << "Eingabe: "; while(cin >> i) { switch(i) { case '1' ... '9' : a = i - '0'; break; case 'a' ... 'f' : a = i - 'a' + 10; break; default : a = i = 0; break; } cout<<"hex: "<<i<<" dec: "<<a<<endl; } }sowas geht nicht, oder

-
selbe,falsche ausgabe des ganzen
-
dann initialisier a mit 0 und shift vor dem switch um 4 nach links. statt "a =" machst "a|=" und die ausgabe aus der schleife raus.
-
#include <iostream> using namespace::std; int main() { int a=0; char i; cout << "Eingabe: "; while(cin >> i) { a << 4; switch(i) { case '1' ... '9' : a |= i - '0'; break; case 'a' ... 'f' : a |= i - 'a' + 10; break; default : a |= i = 0; break; } } cout<<"hex: "<<i<<" dec: "<<a<<endl; }so?
bringt bei mir dann gar keine ausgabe mehr zu stande..hach es wird fast schon wieder hell,ich brauch Schlaf
-
a <<= 4;
-
btw. a sollte unsigned sein.
-
#include <iostream> using namespace::std; int main() { unsigned int a=0; char i; cout << "Eingabe: "; while(cin >> i) { a <<= 4; switch(i) { case '1' ... '9' : a |= i - '0'; break; case 'a' ... 'f' : a |= i - 'a' + 10; break; default : a |= i = 0; break; } } cout<<"hex: "<<i<<" dec: "<<a<<endl; }immer noch keine ausgabe wenn das cout nicht mehr innerhalb der schleife steht,wenn ich es reinschiebe zwar ne ausgabe aber wieder falsch und diesmal (ich nehme an wegen dem leftshift) auch flsche werte
-
dann nimm doch mal nen taschenrechner, und schau wann der fehler auftritt...
cout<<"hex: "<<i<<";muß in die schleife und die ausgabe von a raus. natürlich sollte deine schleife auch iwann abbrechen. falls das 'abbruchszeichen' im switch getestet wird mußt 4 nach rechts

-
ja eine ausgabe hab ich nun aber in der form:
hex:1
hex:2
hex:fund nicht hex:12f
dec ist nun völlig raus
irgendwie bau ich da nen kleinen fehler ein und find ihnn nicht -.-
-
also bei mir schauts so aus
#include <iostream> using namespace::std; int main() { unsigned int a=0; char i; cout << "Eingabe (hex): "; while(cin >> i){ a <<= 4; switch(i) { case '1' ... '9' : a |= i - '0'; break; case 'A' ... 'F' : a |= i - 'A' + 10; break; case 'a' ... 'f' : a |= i - 'a' + 10; break; default : a |= i = 0; break; } cout << i; } cout << endl << "dec: " << a << endl; }und ausgeführt wirds dann mit
g++ x.cpp -o xx && echo "bAAd" | ./xx
-
mir fällt gerade auf, deine hexzahlen können keine 0 also case '0' ... '9' :
-
oh, das kommt ja durchs default...
-
mh,die Ausgabe erfolgt immer noch nicht in nur einer Zeile...ich verzweifel hier noch ):
-
Enfi schrieb:
mh,die Ausgabe erfolgt immer noch nicht in nur einer Zeile...ich verzweifel hier noch ):
willst mich ärgern

-
http://msdn.microsoft.com/en-us/library/k0t5wee3(v=vs.80).aspx
Da steht:
ANSI C requires at least 257 case labels be allowed in a switch statement.Ob 257 stimmt? logisch wäre eher 255 oder 256?
Aber ob da ein Label mehr oder weniger hilft dir nicht ->Also Enfi, da solltest die noch ein wenig Rechenfunktionen in die Quelltexte einbauen damit das Ergebnis deinen Erwartungen entspricht.
MfG f.-th.
-
Doch, die 257 scheint zu stimmen, s. z.B. http://www.bsb.me.uk/ansi-c/ansi-c-one-file (2.2.4.1 Translation limits)
Es gibt dort noch mehr "krumme" Werte: 15, 31, 127, 509, 511, ...
(wobei bis auf 509 die Werte alle "2^N - 1" entsprechen)
-
f.-th. schrieb:
Ob 257 stimmt? logisch wäre eher 255 oder 256?
Wir reden von C.
Für jedes mögliche Eingabezeichen eins macht 256, und EOF(-1) sind 257.