2012-09-28 3 views
0

Salut Quelqu'un peut-il m'aider s'il vous plaît. J'ai besoin de vérifier que mon entrée ne contient que des entiers. Im devinant de la recherche que j'utilise la fonction isDigit mais je ne suis pas sûr de savoir comment l'utiliser pour vérifier le nombre entier.Vérifiez l'entrée est un nombre entier valide

J'utilise C++ pour interagir avec MSI, donc je suis obtenir l'entier comme suit:

hr = WcaGetProperty(L"LOCKTYPE",&szLockType); 
ExitOnFailure(hr, "failed to get the Lock Type"); 

Je pense que je dois changer szLockType en char, puis utiliser isdigit pour parcourir chaque personnage, mais Je ne suis pas sûr de savoir comment mettre en œuvre cela. Toute aide serait grandement appréciée. P.s im un débutant donc s'il vous plaît excusez si c'est une question vraiment triviale .. :)

+0

http://en.cppreference.com/w/cpp/string/basic_string/stol effectuera la conversion, et lancer une exception si elle ne peut pas. – BoBTFish

Répondre

0

Quel est le type de szLockType?

S'agit-il d'une chaîne de caractères à terminaison nulle?

Ensuite, vous pouvez utiliser la syntaxe du tableau pour obtenir des caractères individuels.

for(int i = 0; i < std::strlen(szLockType); i++) { 
    if(!std::isDigit(szLockType[i])) { 
     // it contains a non-digit - do what you have to do and then... 
     break; // ...to exit the for-loop 
    } 
} 

Ou est-ce une chaîne std :: string? Ensuite, la syntaxe est légèrement différente:

for(int i = 0; i < szLockType.length(); i++) { 
    if(!std::isDigit(szLockType.at(i)) { 
     // it contains a non-digit - do what you have to do and then... 
     break; // ...to exit the for-loop 
    } 
} 
+0

La valeur que je reçois est un 'TCHAR *' cela fonctionnera-t-il encore? J'ai essayé le premier et même l'ai converti en char mais j'ai voulu un char *. –

+0

changé de sorte que soit un int .. :) –

+0

selon la plattform, TCHAR est soit un synonyme de char (1 octet caractères ASCII) ou pour wchar (unicode-caractères à 2 octets): http: // msdn .microsoft.com/fr-fr/library/office/cc842072.aspx. La fonction pour obtenir la longueur d'une chaîne wchar est std :: wcslen. La version wchar de isdigit est iswdigit. – Philipp

2

Utilisez std::stoi(). Vous obtiendrez une exception si la chaîne n'est pas une valeur entière.

+1

A partir de C++ 11 ... –

+0

Non, il ne vérifie pas que l'entrée est un entier valide, mais seulement qu'il a un préfixe non-blanc qui est un entier valide, par exemple: 'std :: stoi (" 123broohaha ")' renverra 123, mais 'std :: stoi (" broohaha123 ")' lancera. –

Questions connexes