Stanis Geschrieben 14. Februar 2002 Geschrieben 14. Februar 2002 Hallo zusammen , hier mal wieder eine bescheidene Frage an euch Habe da folgendes Problem ( wieder mal ). Möchte bei ner do- while Schleife mit Eingabe von "n" diese beenden. Wie ist es möglich das Programm nur zu beenden wenn ich "n" drücke ? #include <stdio.h> void main() { char abfrage ... ... do { ... ... ... printf(" Nochmal (j)a oder (n)ein ?"); abfrage=getchar(); } while(??????); } Wenn ich die Abfrage als integer definiere und mit 0 und 1 aufhören oder weitermachen will, klappt alles nur halt nicht mit den Buchstaben. Muss ich die Abfrage als Integer definieren oder gibt es auch einen Weg sie als Char Variable zu definieren ???? Danke schon mal im Vorraus .... stanis Zitieren
gajUli Geschrieben 14. Februar 2002 Geschrieben 14. Februar 2002 In der Art: do { // several things } while ( 'j' != getchar() ); Uli Zitieren
DocMabuse Geschrieben 15. Februar 2002 Geschrieben 15. Februar 2002 Original geschrieben von Stanis ... #include <stdio.h> void main() { char abfrage ... ... do { ... ... ... printf(" Nochmal (j)a oder (n)ein ?"); abfrage=getchar(); } while(??????); } ... Oder so: ... } while (abfrage == 'j'); ... Denn in "abfrage" steht ja schon die Benutzereingabe drin. Ich würde allerdings nicht "getchar()" nehmen, sondern "getch()". So wird nämlich nur 1 Zeichen eingelesen und Du musst die Eingabe nicht mit Return bestätigen. Die Schleife wird so übrigens nur dann fortgesetzt, wenn wirklich der Character 'j' (Ascii 106) gedrückt wird. Bei allen anderen Eingaben wird abgebrochen. Das solltest Du auch noch abfangen, aber darum ging es ja auch gar nicht. Es gibt auch noch ein paar andere Wege, das zu lösen. Grüsse! DocMabuse Grüsse! DocMabuse Zitieren
kto Geschrieben 15. Februar 2002 Geschrieben 15. Februar 2002 hi du kanst int und char benutzen man muß einfach nur die ASCI code berücsichtigen können also besser char in dem stiel do{ bla bla bla }while(abfrage ==n) Zitieren
Hitzefrei Geschrieben 15. Februar 2002 Geschrieben 15. Februar 2002 hmm... eigentlich soll es ja die Schleife durchlaufen, solange nicht 'n' gedrückt wird. Das bedeutet doch, dass die Abbruchbedingung heissen muss " solange wie abfrage nicht 'n' ist. Müsste das ganze dann nicht so aussehehn??? do { . . . } while (abfrage !='n') dies bedeutet doch den Abbruch erst bei Eingabe von 'n', alle anderen Eingaben werden ignoriert, bzw. die Schleife läuft weiter. Zitieren
kto Geschrieben 15. Februar 2002 Geschrieben 15. Februar 2002 ja eigentlich hast du recht, danke Zitieren
Stanis Geschrieben 15. Februar 2002 Autor Geschrieben 15. Februar 2002 Original geschrieben von gaiusjUlius In der Art: do { // several things } while ( 'j' != getchar() ); Uli Wenn ich aber das Programm so starte habe ich eine endlos Schleife. Die Abfrage wird gar nicht durchgeführt #include <stdio.h> main() { int schritt,hoehe; //Eingabe von Schritt und Höhe der Raute int mitte, breite; //Die mittlere Zeile und deren Breite int i,j; // Dummy´s um Raute zu zeichnen // Begin der Schleife Programmwiederholung do { // Daten einlesen bild_loeschen(); printf("Hoehe: "); scanf("%d", &hoehe); printf("Schritt: "); scanf("%d", &schritt); . . . . . . printf("\nMoechten Sie noch eine Raute berechnen (j)= Ja (n)=Nein ? "); } while ('j' != getchar()); return 0; } Vielleicht hilft das hier ein wenig weiter ... gruß Stanis Zitieren
Klotzkopp Geschrieben 15. Februar 2002 Geschrieben 15. Februar 2002 Wenn j als Antwort am Ende 'Wiederholung' bedeutet, dann muss die Schleifenbedingung natürlich while ('j' == getchar()); lauten Zitieren
Scherzkeks Geschrieben 15. Februar 2002 Geschrieben 15. Februar 2002 Hier, Stanis, ein Tipp von mir. Das sollte dir weiterhelfen. Das folgende Beispiel von mir lässt nur ein 'n' zu. Du kannst jede andere belibige Taste drücken- passiert nichts. Erst wenn du 'n' drückst, bricht er das Programm ab. Ist zwar ein kleines und billiges Beispiel, aber es trifft glaube ich auf deine Frage zu: #include <iostream.h> #include <ctype.h> #include <conio.h> void main() { char x; do { x=getch(); x=toupper(x); } while(x!='N'); } PS: Beachte!!! Das 'N' MUSS GROß geschrieben werden!!! Zitieren
HELLmut Geschrieben 15. Februar 2002 Geschrieben 15. Februar 2002 Original geschrieben von Scherzkeks Hier, Stanis, ein Tipp von mir. Das sollte dir weiterhelfen. Das folgende Beispiel von mir lässt nur ein 'n' zu. Du kannst jede andere belibige Taste drücken- passiert nichts. Erst wenn du 'n' drückst, bricht er das Programm ab. Ist zwar ein kleines und billiges Beispiel, aber es trifft glaube ich auf deine Frage zu: #include <iostream.h> #include <ctype.h> #include <conio.h> void main() { char x; do { x=getch(); x=toupper(x); } while(x!='N'); } PS: Beachte!!! Das 'N' MUSS GROß geschrieben werden!!! #include <iostream.h> #include <ctype.h> #include <conio.h> void main() { char x; do { x=getch(); x=toupper(x); } while(x!='N' && x!='n'); } so kann das n auch klein geschrieben werden Zitieren
Crush Geschrieben 17. Februar 2002 Geschrieben 17. Februar 2002 Sollte allerdings mehr als einen Schleifensatz bei Abbruch herausgespruhngen werden (nehmen wir mal an 3-fache-Schleifen-Verschachtelung und von der Innersten will man die Äußerste verlassen), dann ist das GOTO die einzigste wahre Sache (auch wenn es sonst verpöhnt ist), weil hier noch (optisch) der Überblick behalten werden kann und ein mehrfach-Abbruchkriterium unnötigen Code-Ballast erzeugen würde, der den logischen Ablauf nur verschleiert. Zitieren
gajUli Geschrieben 17. Februar 2002 Geschrieben 17. Februar 2002 Original geschrieben von Crush ...dann ist das GOTO die einzigste wahre Sache (auch wenn es sonst verpöhnt ist), ... Das sehe ich weniger absolut. Es kann angezeigt sein und gilt nicht als Stil-Fauxpas, wenn a) eine tief verschachtelte Schleifenstruktur vorliegt das Sprungziel sich in direkter Naehe der Schleifenstruktur befindet Ansonsten sollte man immer erstmal versuchen, ohne solche Spruenge auszukommen, was meist auch gut moeglich ist. Zitieren
Crush Geschrieben 17. Februar 2002 Geschrieben 17. Februar 2002 Oh, hab´ mich wohl etwas ungeschickt ausgedrückt - Du hast natürlich Recht. Ich benutze GOTO ja normalerweise auch nicht. Bei "normalen" Programmen kommen solche tiefe Verschachtelungen auch nicht allzu oft vor - bei Parsern z.B. aber fast immer - es sei denn man arbeitet mit Funktionslisten. Zitieren
kto Geschrieben 18. Februar 2002 Geschrieben 18. Februar 2002 also noch mal - kompieliert mit vs #include <iostream> using namespace std; #include <ctype.h> #include <conio.h> int main() { char x; do { cout<<" Nochmal (j)a oder (n)ein ?"<<endl; x=getch(); x=toupper(x); } while(x!='N'&& x!='n' ); return 0; } und es wahr ;-)) Zitieren
AndyDD Geschrieben 5. Februar 2007 Geschrieben 5. Februar 2007 Mal ne ganz bescheidene Frage: warum prüft ihr auf while(x!='N'&& x!='n' ); wenn ihr sowieso alles in Großbuchstaben umwandelt? Soweit ich weiß beliben Großbuchstaben so wie sie sind und kleine werden in große umgewandelt. Zitieren
Klotzkopp Geschrieben 5. Februar 2007 Geschrieben 5. Februar 2007 HELLmut hat wohl einfach nur die Einschränkung von Scherzkeks missverstanden. Dafür holt man aber eigentlich keinen fünf Jahre alten Thread aus der Versenkung Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.