Zum Inhalt springen

Schleife erst nach Eingabe beenden


Empfohlene Beiträge

Geschrieben

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

Geschrieben
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

Geschrieben

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)

Geschrieben

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.

Geschrieben
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

Geschrieben

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!!!

Geschrieben
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 :P

Geschrieben

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.

Geschrieben
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

B) 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.

Geschrieben

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.

Geschrieben

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 ;-))

  • 4 Jahre später...
Geschrieben

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.

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...