Autor | Nachricht |
---|---|
Beobachter Anmeldedatum: 14.11.2011 Beiträge: 1 | zitieren Hi an alle, Bin Anfänger im Programmieren mit c und habe eine Frage zum Thema ungültige Eingaben. Für mein Programm dürfen keine Dezimalzahlen eingelesen werden, da die Rechnung damit unsinnig wäre. Meine Frage ist nun wie ich es ermögliche, dass für den Fall das jemand doch eine Dezimalzahl eingibt, das Programm eine Ausgabe in der Form: "1,5 ist eine ungültige Eingabe" macht. Das Programm soll danach automatisch wieder zur Eingabeaufforderung zurück kehren. Ich bin dankbar für alle Antworten. mfg Orpheus |
▲ | pn |
Junior Anmeldedatum: 03.05.2011 Beiträge: 77 | zitieren Du musst die Eingabe als String machen und dann den String untersuchen, ob er das gewünschte Format hat. Wenn ja, kannst du den Eingabestring in das Format int oder float, je nachdem was verlangt wird wandeln. Wenn nicht, kannst du eine entsprechende Fehlermeldung absetzen. |
▲ | pn |
Junior Name: Voller Name als Anagramm: Fitje Weshoms Geschlecht: ![]() Fahrzeug: Yamaha YZF R6 Thundercat Anmeldedatum: 15.07.2012 Beiträge: 92 Wohnort: Amberg, Oberpfalz | zitieren Vielleicht lesen ja noch andere Anfänger diesen Beitrag um Info's zu bekommen. Möglicherweise kann man hier mit sogenannten Negativ-Listen bei scanf helfen. Hier ein kleiner Überblick: bei scanf("%[^\n]", array); werden alle Zeichen, auch das Leerzeichen außer das new line-Zeichen eingelesen (Enter). mit scanf("%[0123456789abcdef]", array); werden nur Zeichen, die innerhalb der Rechteckklammern stehen, eingelesen. also wird mit scanf("%[^0123456789,.\n]", array); die Eingabe von Zahlen Dezimalzahlen verhindert, auch das Komma und der Punkt. Beim ersten "unerwünschten Zeichen" wird die Eingabe in das Array abgebrochen und ab diesen Zeichen alle weiteren Eingaben ignoriert. Das Circonflexe zeigt uns also an, das es sich hier um eine "Negativ-Liste" handelt. Einfach mal ein Test-Proggi schreiben und ausprobieren. Positiv-Liste: scanf("%[0123456789+-*/=]", c_posi); Wäre eine Positiv-Liste. Es werden nur die Zeichen eingelesen, die sich innerhalb der Klammern befinden. Beim ersten anderen Zeichen Abbruch. Der Ausdruck scanf("%15[0123456789+-*/=]", c_posi); würde Die Eingabe auf 15 Zeichen(Angabe hinter dem Prozentzeichen) begrenzen. Beispiel:
Würde im Beispiel bei der Negativ-Liste oder der Positiv-Liste nur Zeichen eingegeben welche die Liste nicht akzeptiert, wäre der Rückgabewert von scanf 0. Falls jedoch auch nur ein Zeichen akzeptiert wird, so wird dieses dem char.Array zugewiesen und der Rückgabewert von scanf ist dann 1. Literaturhinweise(mal im Aniquariat oder auf'n Flohmarkt stöbern): Keine Angst vor dem Alter der Bücher, die meisten Grundlagen stimmen immer noch, einige Bücher werden jetzt erweiterte und angepasste Auflagen vorhanden sein, also nachfragen: Gerhard Willms Jahr: 1995 Titel: Das C Grundlagenbuch Verlag Data Becker ISBN 3-8158-1208-0 André Willms Jahr 1997 Titel: C-Programmierung Verlag ADDISON-WESLEY ISBN 3-3-8273-1112-8 André Willms Jahr 1997 Titel: C-Programmierung lernen Verlag ADDISON-WESLEY ISBN 3-8273-1405-4 André Willms Jahr 1997 Titel: C++-Programmierung Verlag ADDISON-WESLEY ISBN 3-3-8273-1152-7 André Willms Titel: C++-Programmierung lernen Verlag ADDISON-WESLEY ISBN 3-8273-1342-2 Dirk Louis Titel: C/C++ Kompendium Jahr 1998 Verlag Markt und Technik ISBN 3-8272-5386-1 Stanley B. Lippman Jahr 1991 Titel: C++ Einführung und Leitfaden Verlag ADDISON-WESLEY ISBN 3-89319-375-8 Kaare Christian Titel: Programmierung mit C++ Verlag Microsoft Press ISBN 3-86063-310-4 Schmidberger (Hrsg.), Schippert, Kölle, Urban Haberbosch Thülly Jahr 1998 Titel: MFC mit Visual C++ 6.0 Verlag MITP ISBN 3-8266-0458-X Ulla Kirch-Prinz Peter Prinz 3. Auflage 2005 Titel: C++ Lernen und professionell anwenden Verlag MITP ISBN 3-8266-1534-4 Helmut Erlenkötter Titel: C++ Objektorientiertes Programmieren von Anfang an Verlag rororo ISBN 3-499-60077-3 Helmut Erlenkötter Titel: C++ Objektorientiertes Programmieren für Windows Jahr 2001 Verlag rororo ISBN 3-499-61205-4 Bleßmann, Bütner, Dax Titel: Anwendungsentwicklung 3.Auflage Bildungsverlag Eins ISBN 978-8237-1143-8 Jürgen Bayer Jahr 2002 Titel: Programmieren lernen Verlag ADDISON-WESLEY ISBN 3-8273-1951-X Stephen Rady Davis Jahr 2005 4te Auflage Titel C++ für Dummies Verlag MITP ISBN 3-8266-3151-x Rainer Egewardt 2te überarbeitete Auflage Titel: Das PC-Wissen für IT-Berufe Verlag Vieweg ISBN 3-358-15739-9 Gerd Siegmund Titel:ATM - Die Technik 3te neubearbeitete und erweiterte Auflage Verag Hüthig ISBN 3-7785-2541-7 Auch für C/C++-Freunde lesenswert, da es viele Grundlagen der Programmierung von Funktionen und Datentypen transparenter macht. Wie gesagt, es müssten für die meisten Bücher erweiterte/Überarbeitete Auflagen zur Verfügung stehen, macht euch im Antiquariat oder auf dem Flohmarkt zu schaffen. Die Grundlagen bleiben ja gleich. Die Programme kann man ja eventuell in Virtual PC laufen lassen(einfach ausprobieren): Christoph Klawun Titel: Turbo Pascal 6.0 Verlag: Addison-Wesley 2te überarbeitete Auflage ISBN 3-89319-374-X R.Herschel / E.-W Dietrich Titel: Turbo Pascal 6.0 Verlag: Oldenbourg Verlag München 1992 ISBN 3-486-21925-1 Wolfgang Link Titel: Assembler Programmierung Eine gründliche Einführung 1995 Franzis-Verlag GmbH, 85586 Poing ISBN 3-77238837-X Michael Rohloff Titel: easy Programmieren Verlag: Markt und Technik ISBN 3-8272-6134-1 Udo Müller Titel: Java – Das Lehrbuch Verlag: MITP ISBN 3-8266-1333-3 Klaus Echtle / Michael Goedicke Titel: Lehrbuch der Programmierung mit Java Verlag: dpunkt 1te Auflage 2000 ISBN 3-932588-22-3 Jan Winkler Titel: Ajax = JavaScripft + XML Für Schnelleinsteiger Verlag: Franzis Jahr 2007 ISBN 978-3-7723-7039-7 Kriegt jetzt von mir ja keinen falschen Eindruck, Bücher sind meine 2te Leidenschaft! Gruß Guiseppe
6x bearbeitet |
▲ | pn |
Newbie ![]() Geschlecht: ![]() Fahrzeug: Countach Quattrovalvole Anmeldedatum: 27.12.2010 Beiträge: 17 | zitieren In der Praxis wird allgemein auf scanf() verzichtet, da es die Größe nicht ermittelt. scanf("%[0123456789abcdef]", &array); ist mit Vorsicht zu genießen, da man hier Überläufe erzeugen kann. (Aber gut für schnelle Lösungen, kannte ich noch nicht) Bessere Variante: mit fgets(cArray, sizeof(cArray), stdin); einlesen und danach mit sscanf(cArray, "%i", &iArray); in das entsprechende Format konvertieren. Hat auch den Vorteil, dass leere Eingaben und Überläufe abgefangen werden. 2x bearbeitet |
▲ | pn |
Gast | zitieren Mach mit!Wenn Dir die Beiträge zum Thread "Eingabe von Dezimalzahlen verhindern" gefallen haben oder Du noch Fragen hast oder Ergänzungen machen möchtest, solltest Du Dich gleich bei uns anmelden:Registrierte Mitglieder genießen die folgenden Vorteile: ✔ kostenlose Mitgliedschaft ✔ keine Werbung ✔ direkter Austausch mit Gleichgesinnten ✔ neue Fragen stellen oder Diskussionen starten ✔ schnelle Hilfe bei Problemen ✔ Bilder und Videos hochladen ✔ und vieles mehr... |
▲ | |
Ähnliche Beiträge | Re: √ | Letzter Beitrag | |
---|---|---|---|
Eingabe von bis zu 1000 Zahlen ? Hallo Leute,
Ich bin ein kompletter Neuling in der Programmierung und befasse mich damit seit ca. 1 Woche intensiv, und mir kommen da ein paar Fragen auf die ich mir durch Recherche bisher nicht beantworten konnte unzwar :
Wie erstelle ich ein Programm... [Java]von Padawan | 0 432 | 10.03.2013, 22:06 ![]() Padawan | |
Rost verhindern wie lackieren? Hi,
ich soll nem kumpel nach dem parkrempler die stelle vor rost schützen.
reicht es da wenn ich anschleife, füller, lack, klarlack fertig?
soll keinerlei ästhetischen ansprüchen gerecht... von Mr.Fister | 6 358 | 05.11.2011, 11:32 DC2_driver | |
Wie kann ich Spam-Anmeldungen verhindern? Mein Problem ist, dass ich permanent Spamanmeldungen habe, ich komme mit dem Zusammenführen und löschen gar nicht hinterher. Verstehe das nciht. Habe doch die Erweiterung Spamschutz drin, oder Antibot wie die heißt ..... von Metusalix | 10 190 | 13.05.2015, 19:24 mgutt | |
Wie (falsches) setzen von Tieferlegungsfedern verhindern ??? Hab noname Tieferlegungsfedern 40/40 bei mir rumliegen, wenn ich diese jetzt einbauen lasse befürchte ich irgendwann ein Keiltieferlegung hinten Tiefer als vorn zu haben :wall:
Was kann ich denn dagegen machen außer noch für hinten 30 federn zu... von Darkstar-Z | 14 1.810 | 02.05.2007, 10:58 skahead | |
Auspuffschrauben: Festgammeln/Kontaktkorrosion verhindern Hallo
Bei der Montage einer geschraubten catback ( Auspuffanlage) möchte ich punkto Schrauben nichts mehr das dahingammelt und auch wieder leicht zu öffnen ist...
Sind Edelstahl Schrauben und Muttern zu empfehlen oder wären verkupferte Auspuffmuttern... von christoph23 | 13 3.061 | 03.05.2016, 16:15 DERChristian | |
![]() Wer so wie ich Probleme mit seinem Router hat, weil dieser beim NAT Loopback in die Knie geht, kann das umgehen, in dem er lokal einen DNS Server installiert und dessen IP in dem Router einträgt.
Wir machen genau das mit einer Fritz!Box und einem... Seite 2 [Allgemein]von mgutt | 15 32.139 | 11.04.2014, 19:30 ![]() mgutt | |
Note 3 Tipp: WLAN Verbindungsabbruch verhindern Immer wieder beschweren sich Note 3 Besitzer darüber, dass die WLAN Verbindung abbrechen würde. Dummerweise ist im Note 3 ein meiner Ansicht nach sinnloses Feature standardmäßig aktiv. Es nennt sich "Automatischer Netzwechsel".
Diese Funktion... von mgutt | 0 1.314 | 14.10.2013, 19:39 mgutt | |
Verhindern das Unterstriche in Leerzeichen gewandelt werden? Hallo leute wie kann ich im Wiki verhindern das Unterstriche "_"
in Leerzeichen umgewandelt werden?
Meine Absicht ist zum Beispiel den User : "ma_ro" anzumelden.
Bis jetzt kommt da : "Ma ro"
raus .
Könnt ihr mir... von bob393 | 1 394 | 14.02.2012, 16:11 Speedtook | |
Wasserflecken nach Autowäsche: Warum und wie verhindern? Hallo,
Titel sagt eigentlich alles. Ich hab nach dem Autowaschen an der Tanke immer so doofe Flecken wenn das Wasser getrocknet ist.
Kann mir jemand sagen, wie die entstehen und wie ich das verhindern kann(mal abgesehen vom polieren nach dem... von McKinley | 6 5.609 | 01.10.2005, 20:40 liene | |
Windows 7: Neuer Ort in Bibliothek = Alle Orte als Liste, wie verhindern? Ich nutze die Bibliotheken. Nun möchte ich wegen Platzmangel auf C (SSD) die Bilder, etc. auf der zweiten Festplatte ablegen. Also füge ich einen neuen Ort hinzu und mache den zum Standard. Allerdings ändert Windows dann die Darstellung so, dass ich die... von mgutt | 2 104 | 28.10.2014, 20:28 mgutt |