Zum Inhalt springen

Endlosschleife


Polo

Empfohlene Beiträge

Hy!

Ich habe ein Programm geschrieben, dass bei Eingabe einer falschen Zahl, eine Fehlermeldung ausgeben soll und zwar solange, bis die richtige Eingabe gemacht wurde. Bei meinem Programm kann man zwischen 1, 2 und 3 auswählen. Drückt man z.B. eine 4, so kommt die Fehlermeldung. Das funktioniert auch alles. Drücke ich aber einen Buchstaben oder ein Komma, so erzeugt das Programm eine Endlosschleife. Wie kann ich diesen Fehler im Programm beheben?

Vielen Dank schonmal!!!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hier der Ausschnitt aus dem Quellcode:

printf("\n\n1.Oberfläche\n2.Volumen");

printf("\nBitte auswählen: ");

scanf("%i",&auswahl);

Der Absturz kommt bei Eingabe eines Buchstaben vor, weil ich den Datentyp int genommen habe, nehme ich char, kommt der Absturz bei Zahlen. Gibt es denn einen Datentyp der Zahlen und Zeichen lesen kann oder wie kann ich dieses Problem sonst beheben?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Originally posted by Klotzkopp

@nic_power:

IIRC lässt scanf den int unverändert, wenn es keine Zahlen zum Umwandeln findet.

Stimmt. Da habe ich wohl was durcheinander geworfen. Im Allgemeinen liest scanf solange ein, bis der Format-String nicht mehr "passt".

@Polo:

Poste doch bitte mal das vollständige Programm.

Nic

Link zu diesem Kommentar
Auf anderen Seiten teilen

Originally posted by Polo

Hier der Ausschnitt aus dem Quellcode:

printf("\n\n1.Oberfläche\n2.Volumen");

printf("\nBitte auswählen: ");

scanf("%i",&auswahl);

Der Absturz kommt bei Eingabe eines Buchstaben vor, weil ich den Datentyp int genommen habe, nehme ich char, kommt der Absturz bei Zahlen. Gibt es denn einen Datentyp der Zahlen und Zeichen lesen kann oder wie kann ich dieses Problem sonst beheben?

Versuch's mal so:

#include <conio.h>

#include <stdio.h>

#include <stdlib.h>

void main() {

char auswahl;

do {

system("cls");

printf("\n\n1.Oberfläche\n2.Volumen");

printf("\nBitte auswählen: ");

auswahl = getch();

}

while (auswahl != '1' && auswahl != '2');

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich habe deine Idee mal ausprobiert, hat aber nicht funktioniert!

Hier ist der Quellcode:

Wird hier eine falsche Zahl eingegeben, erscheint ganz normal die Fehlermeldung.

Gibt man aber einen Buchstaben ein, erzeugt er die Endlosschleife!

#include <stdio.h>

#define PAUSE {printf("\n\n\n\Beenden\n");fflush(stdin);getchar();}

main()

{

int wahl;

printf("\n\n\n1.Quader\n\n2.Kegel\n\n3.Kugel");

printf("\n\n\nBitte waehlen Sie aus: ");

scanf("%i",&wahl);

while (wahl!=1&&wahl!=2&&wahl!=3)

{

printf("\nFalsche Eingabe!");

printf("\n\n\nBitte waehlen Sie aus: ");

scanf("%i",&wahl);

}

PAUSE;

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Polo!

Vielleicht hilft dir die Tatsache, dass die Funktion scanf() einen Rückgabewert hat, nämlich die Anzahl Zeichen, die erfolgreich verarbeitet wurden.

Wenn du also eine Zahl einlesen möchtest, der Benutzer aber nur Buchstaben eintippt, bekommst du eine 0 (null) zurückgeliefert. Die Variable, deren Adresse du als zweiten Parameter übergibst, bleibt in dem Fall natürlich auch unverändert (was auch immer zuvor drinstand).

Das solltest du zusätzlich beachten und entsprechend reagieren.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das Problem ist, dass die Eingabe "a" im Eingabepuffer stehen bleibt und vom scanf() innerhalb der Schleife erneut gelesen wird. Aber auch innerhalb der Schleife bleibt "a" im Puffer, da es eine Falscheingabe ist usw. usf (--> Endlosschleife). Gibst Du eine Zahl an, tritt der Fehler nicht auf, da die Eingabe von scanf() korrekt konvertiert werden kann.

Nic

PS:

Du solltest kein fflush() auf stdin machen (führt unter Umständen zu Fehlern).

Link zu diesem Kommentar
Auf anderen Seiten teilen

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