_wtoi當不能轉換輸入時,所以輸入不是整數,返回零。但同時輸入可以爲零。這是一種確定是否存在錯誤輸入或零的方法嗎?_wtoi返回零:輸入零或非數字輸入?
4
A
回答
4
這是C++,你應該使用stringstream
做你的轉換:
#include <boost/lexcal_cast.hpp>
// ...
std::string s = "1234";
int i = boost::lexical_cast<int>(s);
如果你堅持用C,sscanf
:
#include <iostream>
#include <sstream>
int main()
{
using namespace std;
string s = "1234";
stringstream ss;
ss << s;
int i;
ss >> i;
if (ss.fail())
{
throw someWeirdException;
}
cout << i << endl;
return 0;
}
一個更清潔,更方便的解決方案與升壓轉換器的lexical_cast
存在可以乾淨地做到這一點。
const char *s = "1234";
int i = -1;
if(sscanf(s, "%d", &i) == EOF)
{
//error
}
您還可以使用strtol
與它需要一點點的思維警告。是的,它會返回兩個字符串評估爲零,併爲錯誤爲零,但它也有一個參數(可選)endptr
這將指向數字之後的下一個字符一個已經轉換:
const char *s = "1234";
const char *endPtr;
int i = strtol(s, &endPtr, 10);
if (*endPtr != NULL) {
//error
}
相關問題
- 1. MODF()爲負無窮大返回非零輸入
- 2. Matlab檢查輸入是否爲非零
- 3. getNodeSet返回零輸出
- 4. java.io.IOException:底層輸入流返回零字節
- 5. 輸入數字(可能帶有前導零)但輸出時不帶前導零
- 6. 左加入?零不返回
- 7. 如何在gvim中輸入零字符
- 8. 當輸入非零大小的字符串時,C++ cin會凍結,零空格
- 9. 當使用strtol並輸入2個零(00)時,它只返回一個零點?
- 10. 返回零或正數?
- 11. Common Lisp:break,但返回輸入而不是零?
- 12. Tcl的零食返回的混頻器輸入垃圾列表
- 13. 即使當我輸入正數時,Tkinter輸入框的輸入值爲零
- 14. pthreads_create()返回非零值?
- 15. dequeueReusableCellWithIdentifier總是返回非零?
- 16. 計算矢量的非零輸入的函數
- 17. 在沒有輸入或非數字輸入時的用戶輸入中斷
- 18. VHDL組件輸出返回零
- 19. 如何在CoreData中爲NSDate字段輸入空值或零值
- 20. 從標準輸入獲取下一個字節或零 - Ruby
- 21. 當以科學計數法輸入時,VBA Round()函數總是返回零
- 22. 防止用戶輸入零,但允許包含零的其他數字
- 23. 顯示輸入數字字段上的前導零點
- 24. 區分「空白輸入」和零值作爲實際輸入
- 25. 推輸入到陣列和清零輸入端按預期
- 26. 如何防止用戶輸入零作爲輸入?
- 27. SQL服務器 - 檢查輸入參數爲空或零
- 28. 我將如何使用sscanf接受零作爲輸入,但不是非數字輸入?
- 29. Sympy返回實數零分數爲零
- 30. CertificateFactory返回null與非證書輸入
不,這這就是爲什麼沒有人在實際代碼中使用'atoi' /'wtoi'。 – ildjarn
確實,[wcstol()](http://msdn.microsoft.com/en-us/library/w4z2wdyc)可以更好地完成這項工作。 –
@來自MSDN的FrédéricHamidi:「如果不能執行轉換,則返回0」,所以同樣的問題 – Alecs