Akzeptieren Numerische Werte nur für Eingabe mit scanf
Wie kann ich sicherstellen, dass der Benutzer Eingaben numerische Werte anstelle von alphanumerischen oder beliebigen anderen Zeichen? Auch was zu suchen, einfügen, Fehlermeldung für incorrent-Eingang?
#include<stdio.h>
int main()
{
int a, b, c;
printf("Enter first number to add\n");
scanf("%d",&a);
printf("Enter second number to add\n");
scanf("%d",&b);
c = a + b;
printf("Sum of entered numbers = %d\n",c);
return 0;
}
- Wenn Sie geben anderen dann die numerischen Werte und format-string ist
%d
dann scanf wird ein Fehler ausgelöst wird, verwenden Rückgabewert von scanf(), read: Scanf nicht ausgeführt, zum zweiten mal
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie wirklich wollen, um mit viel user-input, könnten feindlich sein verwenden Sie eine separate Funktion für immer die Anzahl.
Ermöglicht
- führende Leerzeichen : "123"
- Leerzeichen : "123 "
- führende Nullen : "0000000000000000000000000000000000123"
- Scans nett nach Fehler-Eingang.
Fänge die folgenden Fehler
- Keine Eingabe : ""
- Zusätzlicher text nach der Reihe: "123 abc"
- Text vor der Zahl : "abc 123"
- Split Anzahl : "123 456"
- Überlauf/Unterlauf : "12345678901234567890"
- anderer : "--123"
Re-Ansagen auf ungültige Eingabe.
BTW, Man sollte nicht tun
printf("Enter first number to add\n")
. Verwendenfputs()
statt. Betrachten Sie, was passieren würde, wenn der string hatte einen%
im es.#include
- Dateien. Code kompiliert werden, ohne die syntax auf Fehler.Lesen Sie bitte die manual-Seite für scanf. Müssen Sie den Rückgabewert überprüfen. Sollte gibt 1 zurück, wenn in der Lage, mit einer Reihe.
Es ist besser zu vermeiden, mit
scanf
überhaupt. Verwendenfgets
zu bekommen gesamte Zeile, und verwenden Sie dannsscanf
zum extrahieren der Informationen, die Sie benötigen. Überprüfen Sie den Rückgabewert vonsscanf
um sicherzustellen, dass die Eingabe ist, wie erwartet.BEARBEITEN- ich brauchte, um hinzuzufügen, die
getchar()
in der while-Schleife, da die ungelesenen non-numeric item war auf der linken Seite die input-queue verursacht das Programm geht in eine Endlosschleife , weiter habe ich auch Hinzugefügt kompakter formwhile
Schleife für die gleiche , beide haben die gleiche Wirkung .Können Sie überprüfen Sie den Rückgabewert von
scanf
es gibt 1 bei erfolgreicher übereinstimmung mit dem format-Bezeichner ist, und 0 wenn nicht . Sie können es tun, wie dies für Ihr Programm :Kompakter form der while-Schleife :-
Außerdem verwenden Sie immer aussagekräftige Namen für Variablen wie
num1
undnum2
zum Beispiel statta
undb
.