Einschränken der Benutzer nur die Eingabe ganze Zahl, und lehnen alle anderen Zeichen in scanf?
Ich versuche, Benutzereingaben und es Ihnen ermöglicht, nur die Eingabe eine ganze Zahl, die ist auch positiv.
Ich versuche, herauszufinden, diese Aufgabe
printf("Enter the first and second number in whole number: ");
scanf("%d,%d", &first, &second);
if (input != '\n') //notice this line I'm trying to check if is a character//
printf("Error! CHARACTER NOT ACCEPTED!!\n");
else if (First <= 0)
printf("Error! First must be a positive value!\n");
else if (Second <= 0)
printf("Error Second must be a positive value!\n");
Der obige code prüft, ob zwei Dinge. Ein, wenn der Benutzer über die Eingabe der Zeichen, die ich will. Zweitens, wenn die Zahl positiv ist.
Wie realisiere ich diese Prüfungen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht beschränken Sie die Zeichen, die der Benutzer eingibt. Sie sollten Lesen, was der Benutzer gibt Ihnen und entscheiden, was zu tun.
Wenn Sie verwenden möchten, scanf, es könnte so sein:
scanf
's Rückgabewert zeigt die Anzahl der%
s erfolgreich Lesen. Zum Beispiel:Im letzten Beispiel
xf
bleiben in input-und weiterescanf
s zu Lesen.Also für die ersten
if
Sie einfach überprüfen, ob der Rückgabewert vonscanf
1 ist. Wenn nicht, dann Sie nicht Lesen konnte, eine Reihe von input.Für die zweite
if
prüfen Sie, obnum <= 0
Lesen eine ganze Zeile (mit
getline
), dann wandle ihn in eine Zahl, vielleicht mitstrtol
(und das testen der Ende-Zeiger).Oder verwenden Sie den
%n
format fürscanf
und testen Sie die Anzahl (der erfolgreichen conversions) zurückgegebenscanf
strtol
doch wenn dem so ist, bedeutet dies, ich werde nie in der Lage sein, erfolgreich zu sein, diese Aufgabe auf andere Weise?Nicht verwenden scanf! Lesen Sie einfach die Eingabe und rufen Sie dann strtoul mit einem zweiten argument und überprüfen Sie, dass der zurückgegebene Wert im zweiten argument ist '\0'.
strtol
doch wenn dem so ist, bedeutet dies, es gibt keine Möglichkeit, sich erfolgreich dieser Aufgabe?scanf
. Wenn Sie wollen, ablehnen, bad Eingänge wie3.4
oder12b
oder irgendetwas anderes, dass mit einer Ziffer beginnt, ist aber nicht eine gültige Ganzzahl, werden Sie müssen zu Lesen Sie die Eingabe als text und verwenden Sie anschließend entwederstrtol
oder prüfen und konvertieren jedes Zeichen sich selbst.Lesen Sie die Eingabe als text, dann umwandeln in einen integer mit
strtol
:strtol
liest den string ininbuf
und wandeln Sie auf den entsprechenden ganzzahligen Wert.chk
auf das erste Zeichen ininbuf
, der nicht konvertiert. Wenn das Zeichen kein Leerzeichen oder 0, dann wird der string kein gültiges integer ist.Ich nehme an, man braucht so etwas wie dieses :
Beachten Sie, dass die
atoi()
erwartet, dass die string-Darstellung der dezimal -, im Falle dass, wenn es bekommt einen Charakter gibt es eine0
so müssen Sie sich nicht kümmern-Zeichen mehr!EDIT :
Mit einigen Recherchen fand ich, dass es besser zu bedienen Strtol() als atoi(). Sehen Sie, dies zur Klarstellung : Warum nicht benutzen Sie atoi()