ein zeichen nach dem anderen
-
hi, ich möchte erreichen, dass in einer schleife hochgezählt wird, ein zeichen ausgegeben wird, dann wieder hochezählt wird und wieder ein zeichen ausgegeben wird:
wollte es so lösen:
code:printf("+"); for(i=0;i<DELAY;++i) ; printf("+"); for(i=0;i<DELAY;++i) ; printf("+");
aber das programm rechnet erst alles aus, und erst dann werden die 3 zeichen ausgegeben, woran liegt das? vllt am compiler, benutze gnu unter suse 9.1
-
Dein delay ist zu niedrig!
#include <stdio.h> #define DELAY 1000000000 int main(void) { int i; printf("+"); for(i=0;i<DELAY;++i) ; printf("+"); for(i=0;i<DELAY;++i) ; printf("+"); return 0; }
-
ne sry mein delay is gross genug,aber thx sonst ne idee?
-
\n an deine printf's hängen.
-
wozu denn ein '\n' die zeichen sollen schon nacheinander ausgegeben werden
-
Weil Standard-Out meistens Linebuffered ist.. D.h. die Zeichen werden erst ausgegeben wenn eine Zeile vollständig ist. Alternativ:
printf("+"); fflush(stdout);
-
blut-lecker schrieb:
wozu denn ein '\n'
Damit der Buffer-Inhalt an das Gerät "übergeben" wird.
die zeichen sollen schon nacheinander ausgegeben werden
Dann rufe nach jedem printf() eben die Funktion fflush(STDOUT) auf.
Gruß Caipi
-
ja gibt es denn keine alternative zu fflush(stdout) denn eigentlich darf man das ja nicht machen, ist im eigentlichen sinne nicht korrekt
-
ah okay fflush(stdout) ist gut thx
-
fflush(stdout) ist okay.
aber dieser tight loop ist es nicht. schau dich nach einer sleep funktion um. c bringt eine mit, die leider nur in sekunden aufloesen kann.
-
c.rackwitz schrieb:
c bringt eine mit, die leider nur in sekunden aufloesen kann.
Echt?
-
ja, die nennt sich man: sleep(3) - gehört aber nicht zum ANSI Standard.
-
Die war mir, neben usleep und Sleep zB auch schon bekannt.
-
in Standard-C würde mir noch einfallen, die "time.h" Routinen zu verwenden (die allerdings auch nicht CPU-schonender sind als die Zählschleife).
-
sorry, hab mich mit dem sleep() geirrt. es ist definitiv nicht teil von ansi c.