Variable zählen, bei Bedingung zurücksetzen und Display akzualisieren
-
Hallo Leute,
ich habe mal eine bestimmt ziemlich Simple Frage.
Undzwar habe ich einen Barcodescanner, der den Barcodescannt und danach bei einem Tastendruck zur eingabe der anzahl springt.
Diesen wollte ich ganz simpel so machen
Der Code:long int in_anzahl(long int anz){ long int anzahl = 1; int nResult = 0; int x = 10; int key; char string[46]; setfont( LARGE_FONT, NULL ); putchar('\f'); gotoxy( 0, 0); printf("Anzahl..."); //for(;;){ count: anz = 1; while( nResult != TRIGGER_KEY){ setfont( LARGE_FONT, NULL ); gotoxy( 0, (GetMaxYLines() -1)); printf("\tr%-*.*s\tr", GetMaxCharsXPos(), GetMaxCharsXPos(), "Count OK Move"); setfont( LARGE_FONT, NULL ); // Display some info first //printf("%li", anz); //do { string[0] = '\0'; nResult = KeyboardInput(string,1,40,INPUT_ALL,0,1,14,3,Q2_KEY,Q1_KEY,TRIGGER_KEY); if(nResult == ERROR) { nResult = getchar(); } if( nResult == Q1_KEY) { anz++; } if( nResult == Q2_KEY) { anz = anz*10; } if( anz >=999999){ anz = 1; clear(); goto count; } //}while(anz >9999999); printf("\n%li\n", anz); anzahl = anz; } return anzahl; //} }
im Prinzip kann man über taste 1 immer um eins erhöhen, bei taste zwei in 10er Schritten springen.
Nun wollte ich das er natürlich nicht bis unendlich Zählen kann eine grenze machen anz >=....
das macht er zwar auch, jedoch bleibt auf dem display dann die 100000 oder ähnliches stehen. Zählen tut er dann aber wieder von 1 an.
Wisst ihr zufällig was ich falsch mache?Danke
-
Schau dir mal bei printf die Sub-specifier an. Besonders width.
printf("\n%8li\n", anz);
Und mach das goto count; weg. Goto ist böse
Hier kannst du das ersetzen durchanz = 1; continue;
-
DirkB schrieb:
Schau dir mal bei printf die Sub-specifier an. Besonders width.
printf("\n%8li\n", anz);
Und mach das goto count; weg. Goto ist böse
Hier kannst du das ersetzen durchanz = 1; continue;
ja da mit dem goto war nur ein blöder test.
er soll ja, wenn die zahl größer 999999 ist wieder bei 1 anfangen, aber nicht abbrechen.
-
ok danke mit %8li funktioniert es, aber warum setzt er damit die Variable in die mitte des Displays?
-
Mitte des Bildschirms?
Die Zahl sollte 8 Zeichen einnehmen, mit führenden Leerzeichen.
Möchtest du lieber führende Nullen haben?printf("\n%08li\n", anz);
-
ne eigentlich auch nicht. Mit %li stand die gespeicherte Zahl dann halt auf der linken seite, so in der mitte. Wahrscheinlich wegen den 8 führenden Leerzeichen. Aber Nullen wären ja auch das falsche, oder?
-
Du kannst dahinter auch noch Leerzeichen ausgeben, die dann noch vorhandene Zeichen überschreiben.
printf("\n%li \n", anz);
Du benutzt
gotoxy
und [csetfont( LARGE_FONT, NULL );[/c]. Das sind keine Standardfunktionen. Daher weiß ich auch nicht, wie das bei dir aussieht.
-
Ok alles klar, so funktioniert es. Danke.
Jetzt habe ich nurnoch ein Problem mit dem senden, aber das habe ich schon in einem anderen Thread geschrieben.
Vielleicht kannst du dort ja auch mal kurz drüber gucken?