Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben

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?

Geschrieben

Hallo,

Der Code kann durchaus einen Absturz verursachen (ist sogar wahrscheinlich). Es wird ein int erwartet; bei der Eingabe eines (oder mehrerer) Buchstaben befindest Du dich aber außerhalb des definierten Bereichs für ein int, folglich muß scanf ungültige Eingaben verarbeiten.

Nic

Geschrieben
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

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

}

Geschrieben

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;

}

Geschrieben

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.

Geschrieben

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

Geschrieben
Originally posted by Polo

Ich habe deine Idee mal ausprobiert, jedoch trat das Problem weiterhin auf!

Bei mir funktioniert das mit MSVC 7 und Dev-C++ 4.9.7.

Hast du die Zeilen vor das zweite scanf gesetzt? Wenn ja, zeig bitte mal deinen kompletten Code.

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