Grafik
-
hi
ich hab ein Würfel erzeugt und möchte diesen nun verändern können
(zoomen, verschieben usw)D.h wenn ich den Buchstabe z auf der Tastatur drücke soll der Würfel zoomen...
Bis jetzt hab ich ein Standartwert für z im Code (z=1)
void main() { int grt = DETECT, grm; initgraph(&grt, &grm, ""); // Grafik initialisieren //Startwerte festlegen z=1; ... //Zähler auf NULL setzen count=0; //line(100,100,200,200); for(count=0;count<12;count++) { Einlesen(); Umrechnen(); } getch(); // Warten auf Tastatureingabe closegraph(); // Grafikmodus verlassen // wenn Buchstabe z eingegeben wurde soll der Würfel sich gezoomt werden // D.h der Wert z für die Formel muss sich ändern char zeichen; scanf("%c",&zeichen); switch(zeichen) { case 'z': z=z+10; break; default: printf("Falsche Eingabe"); } }
Weiß nich nicht ob das mit der switch Anweisung klappt.
Das Problem ist dass ich dann den Würfel neu zeichnen lassen will/muss
D.H ich muss wieder zum Anfang des Programm kommen
Wie geht das ?
Mit go to ?Besten dank
-
Erstens: das heißt int main().
Zweitens: Die switch-Anweisung sieht korrekt aus, allerdings wartet das scanf(), bis der Eingabepuffer weitergegeben wird (das passiert erst bei einem ENTER) - eventuell solltest du eine direktere Eingabe verwenden.
Drittens: Stichwort Schleifen:
int main() { initgraph(...); char input='\0'; while(input!='x') { ...//zeichnen und Tasten abfragen } closegraph(); }
-
Hallo CStoll
vielen Dank erstmal für deine Hilfe
Mhh, ja stimmt der wartet bis ich die Eingabe gedrückt habe....
int main() { int grt = DETECT, grm; initgraph(&grt, &grm, ""); // Grafik initialisieren //Startwerte festlegen z=1; //Zähler auf NULL setzen count=0; //line(100,100,200,200); for(count=0;count<12;count++) { Einlesen(); Umrechnen(); } getch(); // Warten auf Tastatureingabe closegraph(); // Grafikmodus verlassen char zeichen; char input='\0'; scanf("%c",&zeichen); while(input!='x') { switch(zeichen) { case 'z': z=z+0.5; for(count=0;count<12;count++) { Einlesen(); Umrechnen(); } break; default: printf("Falsche Eingabe"); } } }
So klappts jedoch wieder nicht...
hab ich wohl eine Endlosschleife drauf gemachtIch drücke jetzt den Buchstaben z und mein Grafikteil verschwindet, d-h es wird gar nicht nochmal ausgeführt
Wo liegt der Fehler ?
Das Programm geht nicht in die die case 'z' Anweisung.
In zeichen steht 10 *l* drinn....Danke fürs anschauen
Grüße
-
Klar geht dein Programm in die Schleife - allerdings von dort nicht mehr zurück zur Grafik-Ausgabe. (bzw. das closegraph() sieht für mich so aus, als ob es die Grafikausgabe beendet - das gehört ziemlich sicher HINTER deine Hauptschleife)
PS: Und das scanf("%c",&zeichen) sollte erstens lieber nach input einlesen und zweitens ins Innere der while-Schleife kommen.
-
ah okay danke, aber klappt leider noch nicht...
char zeichen; char input='\0'; while(input!='x') { scanf("%c",&zeichen); switch(zeichen) { case 'z': z=z+0.5; for(count=0;count<12;count++) { Einlesen(); Umrechnen(); } break; default: printf("Falsche Eingabe"); break; } } closegraph(); // Grafikmodus verlassen
Wenn ich nun z eingabe wird zwar der Würfel vergrößert, allerdings kommt nach dem ich z und Enter gedrückt habe immer noch Falsche Eingabe
Ist klar, weil die while schleife nicht verlassen wird... und die Würfel bleiben da, anstatt nur den aktuellsten Würfel zu zeichnendas krieg ich aber noch hin
-
mmh schade , es läuft immer noch nicht rund.
Der Bildschir wird nicht komplett neu aufgebaut , d.h der alte ungezommte Würfel bleibt bestehn.Und die Laufzeit ist auch nicht gut....
Wo liegt denn noch der Fehler ?
int main() { int grt = DETECT, grm; initgraph(&grt, &grm, ""); // Grafik initialisieren //Startwerte festlegen z=1; po=320; qo=140; m=0.01; b=45*PI/180; g=45*PI/180; //Zähler auf NULL setzen count=0; //line(100,100,200,200); for(count=0;count<12;count++) { Einlesen(); Umrechnen(); } //getch(); // Warten auf Tastatureingabe char zeichen; char input='\0'; while(input!='x') { scanf("%c",&input); switch(input) { case 'z': z=z+0.5; for(count=0;count<12;count++) { Einlesen(); Umrechnen(); } break; case 'p': po=po+50; for(count=0;count<12;count++) { Einlesen(); Umrechnen(); } break; default: printf("Falsche Eingabe"); } } closegraph(); // Grafikmodus verlassen }
DANKE
-
Wenn dich stört, daß das ENTER verarbeitet wird und zu einer Fehlermeldung führt, kannst du einen leeren "case '\n':" Zweig einbauen, der sich darum kümmert.
Ansonsten solltest du einzelne Zeichen nicht per scanf() einlesen, sondern per getc() (oder per getch() - das wartet noch nichtmal auf das ENTER).
PS: Und so oft, wie du die for-Schleife benötigst, solltest du sie aus dem switch auslagern