當您將cin >> letter轉換爲int變量時會發生什麼?我嘗試了簡單的代碼來添加2個int數字,首先閱讀它們,而不是添加它們。但是,當我輸入字母時,它只是失敗並打印大量的數字。但是什麼導致了這個錯誤?我的意思是,我期望它加載並使用該字母的ASCII碼。C++字符轉換爲int
回答
如果您明確地將您的char轉換爲int類型,它將使用ASCII代碼,否則它不會自己對int進行轉換,因此您會得到奇怪的結果。
你可以使用int istream::get();
我假設你有這樣的代碼:
int n;
while (someCondition) {
std::cin >> n;
.....
std::cout << someOutput;
}
當你輸入的東西,不能被理解爲一個整數,流(的std :: CIN)進入故障狀態和所有後續嘗試輸入失敗,只要你不處理輸入錯誤。
您可以測試的輸入操作的成功:
if (!(std::cin >> n)) //failed to read int
,您可以流恢復到良好的狀態,並丟棄處理的字符(導致輸入失敗輸入):
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
另一種可能性是接受輸入到字符串變量(很少失敗)並嘗試將字符串轉換爲int。
這是一個非常常見的輸入問題,在這裏和其他地方應該有大量關於它的線程。
問題在於,當您使用C++流讀入整數變量時,輸入法需要可以組成數字的字符,例如'+',' - ','0'...'9 」。任何不在此集合中的字符都會終止輸入,並從這些字符創建一個數字。
要獲取字符的ASCII值,需要將數據輸入到char
變量中。它在內部具有ASCII值(提供程序不讀取16位字符或EBCDIC)。如果要查看ASCII值,則需要輸出整數變量(通常需要在輸出之前進行強制轉換)。
如果讀取整數失敗,程序需要通知用戶輸入不正確。程序可能要求用戶在程序可以處理輸入數據之前再次輸入該號碼。
當你正在做的事情,如:
int x;
cin >> x;
您指示C++的期望來讀取鍵盤的int
。實際上,當你輸入的東西不是int
時,輸入流(在本例中爲標準輸入)由於其錯誤狀態而呈現不可用。
這就是爲什麼我個人更喜歡總是讀取字符串,並根據需要將它們轉換爲數字。 C++標準庫的C部分有轉換功能,可以幫助實現這一點。
double cnvtToNumber(const std::string &num)
{
char * ptr;
double toret = strtod(num.c_str(), &ptr);
if (*ptr != 0) { // If it got to the end of the string, then it is correct.
throw std::runtime_error("input was not a number");
}
return toret;
}
在這裏,您正在轉換一個數字,並檢測轉換是否正確。strtod(s)
只會在查找字符串末尾或空格時停止。爲了避免尾隨空格愚弄功能,你可以需要一個微調功能:
std::string &trim(std::string &str)
{
// Remove trailing spaces
unsigned int pos = str.length() -1;
while(str[ pos ] == ' ') {
--pos;
}
if (pos < (str.length() -1)) {
str.erase(pos + 1);
}
// Remove spaces at the beginning
pos = 0;
while(str[ pos ] == ' ') {
++pos;
}
if (pos < 1) {
str.erase(0, pos);
}
return str;
}
現在可以安全地從控制檯(或任何其他輸入流)閱讀:
int main()
{
std::string entry;
try {
std::getline(std::cin, entry);
int age = cnvtToNumber(trim(entry));
std::cout << age << std::endl;
} catch(const std::exception &e) {
std::cerr << e.what() << std::endl;
}
}
當然,你可以如果你總是讀double
然後轉換它們,會失去精度。整數有特定的功能(strtol(s)
),以防您想進一步調查。
- 1. 將字符串轉換爲int,int轉換爲字符串
- 2. 將字符串轉換爲int在C++
- 3. ASCII字符爲int的轉換用C
- 4. 轉換0x0000F85D字符串爲int C#
- 5. C:將int []轉換爲字符串
- 6. C - 將int轉換爲字符
- 7. C:將int轉換爲字符串
- 8. C++將int轉換爲字符數組?
- 9. Objective-C int轉換爲字符
- 10. 將字符串轉換爲int(C++)
- 11. C++將字符串轉換爲int
- 12. C++,將字符串轉換爲int
- 13. 轉換C++字符串爲int
- 14. C++將int轉換爲字符串?
- 15. 將字符串轉換爲int-objective c
- 16. 將字符串轉換爲int c
- 17. 字符轉換爲int?
- 18. 將int轉換爲字符
- 19. 將int轉換爲int值的字符
- 20. C#類型轉換(字符串轉換爲int)
- 21. C++將Ascii Int轉換爲字符到Int
- 22. 轉換文本字段字符爲int
- 23. 將非數字字符轉換爲int?
- 24. 字符串到int數組轉換c#
- 25. C++中轉換INT字符串
- 26. 轉換SQL INT到C#字符串
- 27. C++:int轉換成字符串
- 28. 字符到int轉換錯誤在c
- 29. C#參數不能將int轉換爲字符串或字符串int
- 30. 將字符串轉換爲無符號long long int C
你可以發佈你使用的代碼嗎? – 2010-03-09 09:24:00