Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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

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)

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.

ja eigentlich hast du recht, danke

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

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

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

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.

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.

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.

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

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.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.