[SOLVED] unsigned int runterzählen??
-
Hi!
for(unsigned i=0; i>=0; --i) { }
GCC schrieb:
Warnung: Vergleich eines vorzeichenlosen Ausdrucks >= 0 ist stets »wahr«
GCC hat da mit Sicherheit recht, aber wie schreibt man das richtig?!?!
for(unsigned i=0; i; --i) //Jetzt zählt er nur bis 1 :-( { }
Ty
-
Wenn i = 0 ist dann ist i immer gleich 0 was die Schleife hinfaellig macht. Um i zu dekrementieren muss es auch groesser sein als 0 z.b.
for(unsigned i=10; i > 0; --i) { }
oder
for(unsigned i=10; i != 0; --i) { }
-
schwudde schrieb:
for(unsigned i=0; i > 0; --i) { }
Ich möchte doch dass die 0 dabei ist ...
//Edit: Das ist ne andere Schreibweise, hört dann auch bei 1 auf zu zählen ?!
-
wie wärs mit > -1
-
Quellcode schrieb:
wie wärs mit > -1
Ich tipp jetzt einfach mal dass er da sich wegen Vergleich von vozeichenlosen und vorzeichenbehafteten beschweren würde ...
-
Was willst du überhaupt machen? Eine Endlosschleife geht auch einfacher.
-
confussball schrieb:
Was willst du überhaupt machen? Eine Endlosschleife geht auch einfacher.
Von td::numeric_limits<unsigned>::max() bis 0 runterzählen
-
for (unsigned i = wert; i > reinterpret_cast<unsigned>(-1); --i)
-
kann man die größe des unsigned nicht einfach mit sizeof() festlegen und dann mit normalen integerwerten runterzählen?
-
unsigned i = td::numeric_limits<unsigned>::max() + 1; while (i --> 0) { }
-
confussball schrieb:
[cpp]unsigned i = std::numeric_limits<unsigned>::max() + 1;
while (i --> 0)
{
}[/cpp]Ja und wie setzt du das --> um?
@helferlein: Also mein GCC kann das nicht casten!
-
Und wieso machst du nicht einfach folgendes:
for(unsigned int ui = /* Startwert */; ui > 0; --ui) { /* irgendetwas am besten eine Funktion */ } /* Nochmals was für die Null */
Grüssli
-
Dravere schrieb:
Und wieso machst du nicht einfach folgendes:
for(unsigned int ui = /* Startwert */; ui > 0; --ui) { /* irgendetwas am besten eine Funktion */ } /* Nochmals was für die Null */
Grüssli
Weil mir das noch unschöner als diese Behelfslösung vorkommt:
unsigned j=1000; while(true) { j--; /*genialitäten*/ if(!j) break; };
Ich dachte halt dass "man" das irgendwie eleganter macht...
//Edit: Ty@all
-
Naja, du könntest auch das folgende machen:
unsigned int ui /* Startwert */; do { --ui; // Mach etwas. } while(ui != 0);
Allerdings fehlt dir dann am oberen Rand eine Zahl. Müsstest also Code vorher ausführen, anstatt bei mir erst danach.
Grüssli
-
confussball schrieb:
while (i --> 0) { }
… Wow. Irreführende, aber dann auch wieder erstaunlich angebrachte Juxtaposition.
-
Besser:
unsigned i = WERT; do { // blubb } while (i --> 0);
-
Dravere schrieb:
Naja, du könntest auch das folgende machen:
unsigned int ui /* Startwert */; do { --ui; // Mach etwas. } while(ui != 0);
Allerdings fehlt dir dann am oberen Rand eine Zahl. Müsstest also Code vorher ausführen, anstatt bei mir erst danach.
Grüssli
Ah danke, das sieht bis jetzt am besten aus... Jedoch muss man wohl startwert+1 machen da sonst wieder die 0 nicht dabei ist wenn man vor dem dekrimieren "was macht"
-
Konrad Rudolph schrieb:
confussball schrieb:
while (i --> 0) { }
… Wow. Irreführende, aber dann auch wieder erstaunlich angebrachte Juxtaposition.
Ah! Juxtraposition!!! Nice ui-- > 0 Jetzt verstehe ich ^^ Dann nehm ich wohl das!!!
-
for(unsigned i=start; i --> 0;) { }
Ich glaub mehr ist nicht rauszuholen Tyvm!
-
Juxtraposition? -->??
*Tuut tuut* bahnhof