2015-06-18 103 views
4

代碼:輸入上書 '廉政'

int a; 
cin>>a; 
cout<<a<<endl; 

然後我用g++ test.cpp,並運行它。然後我給變量a輸入一個字母'b'。輸出爲0

但是,當我測試的其他代碼:

cout<<int('b')<<endl; // output: 98 

爲什麼?有什麼不同?

+3

已經爲您刪除了'C'標籤。請注意,'C'和'C++'是不同的語言。 – kaylum

+0

代碼的第一位並不是說將字符轉換爲整數。第二個呢。你爲什麼期望他們是一樣的? –

回答

4

std::cin是一個對象,一個std::istream的一個實例。 std::istream已超載>>以支持a variety of types。其中一種是&int。當>>的左邊有一個std::istream,右邊有一個整數引用時,調用方法istream& operator>> (int& val)。該方法的概念實施如下。

  1. 在累加器
  2. 商店0讀輸入的一個字符
  3. 如果字符爲0-9,其十進制值添加到累加器
  4. 如果沒有,返回累加器的值
  5. 返回到步驟2

當您提供「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,然後您將其打印爲整數。

2

您試圖執行的輸入操作失敗。由於aintcin需要int。因爲它得到一個char它失敗。你可以通過改變你的代碼來測試這個:

int a; 
cin>>a; 
if(!cin) 
    cout << "input failed"; 
else 
    cout<<a<<endl; 

輸入:

a 

輸出:

input failed 

看到這個live example

+0

這對於'cin >>&int'是絕對不正確的錯誤處理。 0是一個有效的整數輸入,並且評估爲'false',你將聲明爲「輸入失敗」。 – OregonTrail

+0

@OregonTrail感謝您的糾正。 – NathanOliver

0

當您使用 'B' 至如果一個整數值,你的程序認爲你輸入了一個無效的數字,所以它沒有用int('b')賦值。依然採用的

0

不知道初始值,如果這個你發現了什麼:

char a; 

cin >> a; 
cout << a << endl; 

嘗試改變intchar, 當你進入3,它會輸出3; 當你輸入b時,它會輸出b;

如果要輸出ASCII碼,可以使COUT,如:

cout << (int) a << endl; 

,那麼你會得到98當你進入b

相關問題