2014-10-16 70 views
0

當爲兩個變量輸入'1'時,爲什麼不打印「真」?我怎樣才能解決這個問題?比較int和char與鑄造

int main() { 
    int i; 
    char c; 
    cout << "Type int: "; 
    cin >> i; 
    cout << "Type char: "; 
    cin >> c; 
    if (i == (int)c) 
     cout << "true" << endl; 
    else 
     cout << "false" << endl; 
} 

回答

1

與其他輸入流對象一樣,std::cin設計爲在讀入不同類型時工作方式不同。

對於int,它讀取您寫入控制檯的數字並將其解析爲內部整數形式。這很方便:「格式化提取」意味着我們立即得到一個有用的int,並且不需要從字符串到數字的任何轉換。

對於char,它讀取您寫入控制檯的實際字母或數字或標點符號;它不解析它。它只是存儲該角色。在這種情況下,c是49,因爲這是'1'的ASCII值。

如果你想看看int是否包含1char包含'1'匹配,那麼你可以利用所有的數字都按順序發現從48開始ASCII的財產,或'0'

if (`i` == `c`-'0') 

但是,如果你這樣做,你應該確認:

  • 你的平臺使用ASCII;
  • c包含一個數字('0', '1', ..., '9')。

如果可以的話,通常要避免這些黑客行爲。通常有另一種方法來檢查你的輸入。

+0

我希望函數在輸入相等值時輸出'true',即char ='2'和int = 2,當輸入不同值時爲false。感謝您的解釋。 – blzn 2014-10-16 23:54:56

+0

@blzn:然後看看我的編輯。 – 2014-10-16 23:57:22

2

即使char是整數類型,它是由操作者>>從其他整數類型區別對待。

  • 對於非炭整數接收者變量>>操作者把輸入作爲整數值的表示。整個表示從輸入中消耗,轉換爲整數並存儲在recepient變量中。例如,如果輸入8作爲輸入,則收件人變量(例如,int)將收到整數值8。如果輸入42作爲輸入,則收件人變量將收到整數值42

  • 但是對於char收件人變量,>>運算符將輸入視爲純粹的字符序列。只有該序列的第一個字符被消耗並立即存儲在收件人變量中。例如,如果輸入8作爲輸入,char收件人變量將收到字符'8',這對應於整數值56。如果輸入42作爲輸入,則收件人變量將接收字符'4',該字符對應於整數值52

這就是導致您的情況不平等的原因。