2016-11-19 86 views
2

我對C++仍然很陌生,所以這可能是一個愚蠢的問題。在下面的代碼中,爲什麼當我將索引的類型更改爲signed char時,index > 25的計算結果爲true。不是一個有符號的字符只是一個1字節的整數?C++ - 數據類型不同地評估

#include <iostream> 
using namespace std; 

char lowercase [26] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'}; 

int main() { 
    short index; 

    cout << "Enter a number 0 to 25: "; 
    cin >> index; 
    if (index > 25 || index < 0) { 
     cout << "That number is out of range." << endl; 
     return 0; 
    } 
    cout << "The lowercase letter for this number is " << lowercase[index] << "." << endl; 
    return 0; 
} 
+0

爲什麼'int'會在'short'時出現? – tadman

+0

你沒有說你輸入了什麼值,或者'index'實際上接收了什麼值。而且你不檢查'cin >>'是否成功或失敗。 –

+0

我不知道爲什麼我選擇使用「short」而不是「int」。 –

回答

3

讓我們改一下這個問題只是有點:

char index; 
cin >> index; 

可能更容易看清問題。當您將輸入讀入char時,您將獲得用戶輸入的第一個字符的字符代碼。在一個典型的系統中,這是ASCII碼,數字的編碼在48到57之間。

因此,當您輸入index時,如果它是有符號字符,則會得到大於等於48的值。

+0

謝謝!我認爲'signed char'與'char'不同,'signed char'只是一個1字節的整數。 –

+0

@AlarmedDino'char'和'signed char'都是1個字節的整數。不同之處在於'operator >>(istream&,char&)'與'operator >>(istream&,short&)'具有不同的行爲。 –

0

這是因爲當用戶輸入的值介於0到25之間時,所評估的值與ascii表格0 == 48(ascii)相關。數據類型char只會在輸入的第一個值中出現,例如單個數字/字母char foo =「1」