Überprüfen, ob die Eingabe eine Zahl oder einen string in C++
Schrieb ich den folgenden code, um zu überprüfen, ob die Eingabe(answer3) ist eine Zahl oder einen string, wenn es nicht eine Zahl zurückgegeben werden soll "Geben Sie Nur Zahlen", aber gibt es das gleiche auch für zahlen. Bitte empfehlen Sie mir eine Lösung.
#include <iostream>
#include <string>
#include <typeinfo>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
using namespace std;
int main ()
{
string ques1= "Client's Name :";
string ques2 = "Client's Address :";
string ques3 = "Mobile Number :";
char answer1 [80];
string answer2;
int answer3;
cout<<ques1<<endl;
cin>>answer1;
cout<<ques2<<endl;
cin>>answer2;
cout<<ques3<<endl;
cin>>answer3;
if (isdigit(answer3))
{
cout<<"Correct"<<endl;
}
else
{
cout<<"Enter Numbers Only"<<endl;
}
system("pause>null");
return 0;
}
Gibt es etwas falsch mit der enter-Taste auf Ihrer Tastatur? Die Leertaste scheint dodgy wie gut
Weiter
Es macht keinen Sinn zu rufen
isdigit
nimmt ein einzelnes Zeichen als int
, interpretiert es als ein ASCII-Zeichen um und gibt einen Wert ungleich null, wenn es eine Ziffer ('0' bis '9', ASCII 48 bis 57) oder null, wenn es nicht. Es hat keine Möglichkeit, Ihnen zu sagen, wenn Sie Lesen eine integer in answer3
.Weiter
cin >> someIntVariable
verwirft führenden Leerzeichen, liest einem optionalen Vorzeichen (-
oder +
), gefolgt von einer Folge von Ziffern, anhalten an der ersten nicht-Ziffer-Zeichen. Also, wenn jemand etwas, das nicht interpretiert werden, setzt es die variable auf 0. Das ist der Grund, warum isdigit
höher ausfällt.Es macht keinen Sinn zu rufen
isdigit
auf eine integer
es sei denn, Sie wissen, genau, was es bedeutet, eine ganze Zahl zu sein eine Ziffer.InformationsquelleAutor WESTRUK | 2014-02-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
, Wenn Sie C++98, die Sie verwenden können
stringstreams
(#include <sstream>
):Wenn boost ist verfügbar, um Sie, die Sie verwenden können, lexical_cast (
#include <boost/lexical_cast.hpp>
):Wenn C++11 zur Verfügung, Sie können verwenden Sie die vordefinierte
std::stoi
Funktion von<string>
:AUSGÄNGE:
InformationsquelleAutor jrd1
Können Sie
regex
um dies zu tun:Wenn Sie wollen
isNumber()
eine generische Funktion, die jede Art von input:Den oben
isNumber()
Funktion überprüft nur integer, double oder float-Wert mit Präzision (enthält dot.
) wird nicht true zurückgegeben.Wenn Sie wollen Präzision zu, dann ändern Sie die
regex
Zeile:Wenn Sie möchten, eine effizientere Lösung finden diese eine.
InformationsquelleAutor Jahid
Die Funktion isdigit() wird verwendet, um zu testen, für die nur Ziffern ( 0,1,...,9)
verwenden Sie diese Funktion, um zahlen überprüfen
Dies kann nicht verwendet werden für dezimal-zahlen. Nur ganze zahlen können überprüft werden.
Das ist genau mein Punkt.
kein Wortspiel beabsichtigt 🙂
InformationsquelleAutor Chethan N
Den Eingang zu
isdigit
ist ein integer-Wert. Jedoch, wird es wieder wahr (nicht null), wenn der Wert entspricht '0'-'9'. Wenn Sie Sie konvertieren, um integer-Werte, Sie sind 48-57. Für alle anderen Werte,isdigit
wird false zurückgegeben (null).Können Sie prüfen, ob Sie eine Ganzzahl, indem Sie ändern die Prüfung Logik:
InformationsquelleAutor R Sahu
Anderen Antwort mit
strtod
:In der Lage sein, um mit jeder Art von parameter verwenden, Vorlage:
Hinweis:
NAN
undINF
wird es false zurück (um genau zu sein, jedes Zeichen, außer Gültiger exponent wird es false zurück). Wenn Sie zulassen möchten, dassnan
undinf
löschen Sie die|| std::isalpha(s[0])
Teil.InformationsquelleAutor Jahid
Interesse Phänomen sind die
isdigit
erfordertchar
geworfen zu werden, umunsigned char
. (Siehe auch hier).InformationsquelleAutor user3277268
Das ist eine sehr alte Frage, aber ich dachte, ich möchte hinzufügen, meine eigene Lösung, die ich verwende in meinem code.
Anderen Weg, um zu überprüfen, ob ein string eine Zahl ist die
std::stod
- Funktion, die erwähnt wurde, aber ich nutze es ein wenig anders. In meinem Anwendungsfall habe ich einen try-catch-block um zu überprüfen, ob die Eingabe ein string oder eine Zahl, wie also mit dem code:Das primäre problem mit dieser Lösung ist, dass strings, die beginnen mit zahlen (aber nicht alle zahlen) wird in zahlen umgewandelt werden. Dies kann leicht behoben werden, indem
std::to_string
auf die zurückgegebene Zahl und vergleicht Sie mit der ursprünglichen Zeichenfolge.InformationsquelleAutor MarkSill