2012-09-28 42 views
0

嗨誰能幫助我請。我需要檢查我的輸入只包含整數。林猜測從查找它,我使用isDigit函數,但我不知道如何使用它來檢查整個數字。檢查輸入是一個有效的整數

我用C++與MSI所以我得到的整數如下交互:

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

我想我必須要改變szLockType爲char,然後使用isdigit通過每個字符進行掃描,但我不知道如何實現這一點。任何幫助將不勝感激。 P.s我是初學者,所以請原諒,如果這是一個非常微不足道的問題.. :)

+0

http://en.cppreference.com/w/cpp/string/basic_string/stol將執行轉換,並且如果它不能執行則拋出異常。 – BoBTFish

回答

0

什麼是szLockType的類型?

它是一個以null結尾的字符串嗎?

然後,您可以使用數組語法來獲取單個字符。

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 
    } 
} 

或者它是一個std :: string?然後語法略有不同:

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

我得到的值是一個'TCHAR *'這個還能工作嗎?我試過第一個,甚至把它轉換爲char,但我想要一個char *。 –

+0

更改它以使其成爲int .. :) –

+0

取決於平臺,tchar是char(1字節ASCII字符)或wchar(2字節unicode字符)的同義詞:http:// msdn .microsoft.com/EN-US /圖書館/辦公室/ cc842072.aspx。獲取wchar字符串長度的函數是std :: wcslen。 isdigit的wchar版本是iswdigit。 – Philipp

2

使用std::stoi()。如果字符串不是整數值,你會得到一個異常。

+1

從C++ 11開始... –

+0

不,它不會檢查輸入是否是有效整數,只是它有一個非空白前綴是一個有效整數,例如:'std :: stoi(「 123broohaha「)' 將返回123,但'std :: stoi(」broohaha123「)'會拋出。 –

相關問題