Count bleibt 0
-
Hiho ich hab ein kleines Verständnisproblem ich hatte ein kleines Programm geschrieben und mich gewundert warum ein IF vergleich nicht funktionierte. Und hab den gesuchten wert mal direkt über der IF anweisung zugewiesen
int Width = 1680; int Height = 1050; char* bitmap = new char[Width*Height*3]; int count = 0; for (int i = 0; i < (Width*Height*3); i++) { bitmap[i] = 221; if (bitmap[i] == 221) { count++; } } Form1->Edit1->Text = count;seltsamer weise zumindest für mich bleibt count immer auf dem wert 0

Die zuweisung funktioniert bitmap[i] hat den Wert 221 das hab ich überprüft.
Wäre Supi wenn mir das jemand erklären könnte.
-
221 liegt ausserhalb des Bereichs von
char. Vielleicht möchtest duunsigned charverwenden.
-
also so wie es da steht ist das eigentlich korrekt und count müsste inkrementiert werden (wie es mit zeile 12 ist kann ich nicht sagen, da ich keine winforms beherrsche)
wie hast du festgestellt dass bitmap[i] die 221 beinhaltet?
per debugger?
-
brotbernd schrieb:
221 liegt ausserhalb des Bereichs von
char.Das ist implementationsabhängig. Es ist nicht definiert, ob char von -128 bis 127 geht oder von 0-255. Es muss nur die Werte 0-127 aufnehmen können. ASCII halt. Char ist eben nur für Zeichensalate gedacht, für Rechnungen sollte man signed/unsigned char benutzen, die einen definierten Wertebereich haben.
Im Gegensatz zu int/signed int und short/signed short ist char und signed char eben nicht das selbe.
-
brotbernd schrieb:
221 liegt ausserhalb des Bereichs von
char. Vielleicht möchtest duunsigned charverwenden.hat der threadersteller eig ausgeschlossen, weil er ja sagte, dass bitmap[i] den zustand *221* angenommen hat...
-
Ich weiss zwar nicht genau wo es herkommt, aber mein Gefühl sagt mir, dass man Form1->Edit1->Text einen String zuweisen muss und kein int.
Vielleicht zählt count doch hoch, nur du kriegst es nicht mit?
-
Wenn ich mir den Code und die Fehlerbeschreibung ansehe, bin ich davon überzeugt, dass in diesem konkreten Fall brotbernd richtig liegt.
-
brotbernd schrieb:
221 liegt ausserhalb des Bereichs von
char. Vielleicht möchtest duunsigned charverwenden.Ja, das ist die Lösung. Wenn man das compiled bekommt man in der if-verzweigung ein Warning : "comparision is always false due to limited range of data type". Ändert man das ganze dann auf
unsigned char* bitmap = new unsigned char[Width*Height*3];zählt counter auch brav hoch.
-
Hi Leute erstmal Danke für die vielen und schnellen Anworten es lag wirklich an unsigned char
hatte den wert auf 221 überprüft indem ich mir den Array als Bitmap aufen Bildschirm ausgeben lassen hab und die farbe überprüft hab^^ das war der Denkfehler dem Bitmap ist es egal ob mit oder ohne vorzeichen nur dem if nicht. Also nochmal danke für die fixe Hilfe 