代碼:輸入上書 '廉政'
int a;
cin>>a;
cout<<a<<endl;
然後我用g++ test.cpp
,並運行它。然後我給變量a輸入一個字母'b'。輸出爲0
但是,當我測試的其他代碼:
cout<<int('b')<<endl; // output: 98
爲什麼?有什麼不同?
代碼:輸入上書 '廉政'
int a;
cin>>a;
cout<<a<<endl;
然後我用g++ test.cpp
,並運行它。然後我給變量a輸入一個字母'b'。輸出爲0
但是,當我測試的其他代碼:
cout<<int('b')<<endl; // output: 98
爲什麼?有什麼不同?
std::cin
是一個對象,一個std::istream
的一個實例。 std::istream
已超載>>
以支持a variety of types。其中一種是&int
。當>>
的左邊有一個std::istream
,右邊有一個整數引用時,調用方法istream& operator>> (int& val)
。該方法的概念實施如下。
當您提供「b」作爲輸入istream& operator>> (int& val)
,它立即存儲「積累」 0在int
變量。例如:
#include <iostream>
int main (const int argc, const char * const argv[]) {
int b = 100;
std::cout << b << std::endl;
std::cin >> b;
std::cout << b << std::endl;
return 0;
}
執行:
100
b
0
至於鑄造,當你施放值'b'
爲整數,你已經在存儲器中的字節,其值爲98,通過它來打印爲一個整數。當您使用>>
時,內存中的結果值爲0,然後您將其打印爲整數。
您試圖執行的輸入操作失敗。由於a
是int
cin
需要int
。因爲它得到一個char
它失敗。你可以通過改變你的代碼來測試這個:
int a;
cin>>a;
if(!cin)
cout << "input failed";
else
cout<<a<<endl;
輸入:
a
輸出:
input failed
看到這個live example
這對於'cin >>&int'是絕對不正確的錯誤處理。 0是一個有效的整數輸入,並且評估爲'false',你將聲明爲「輸入失敗」。 – OregonTrail
@OregonTrail感謝您的糾正。 – NathanOliver
當您使用 'B' 至如果一個整數值,你的程序認爲你輸入了一個無效的數字,所以它沒有用int('b')賦值。依然採用的
不知道初始值,如果這個你發現了什麼:
char a;
cin >> a;
cout << a << endl;
嘗試改變int
到char
, 當你進入3
,它會輸出3
; 當你輸入b
時,它會輸出b
;
如果要輸出ASCII碼,可以使COUT,如:
cout << (int) a << endl;
,那麼你會得到98
當你進入b
已經爲您刪除了'C'標籤。請注意,'C'和'C++'是不同的語言。 – kaylum
代碼的第一位並不是說將字符轉換爲整數。第二個呢。你爲什麼期望他們是一樣的? –