2016-11-19 6 views
2

私はまだC++の新機能ですので、これは愚かな質問かもしれません。下のコードでは、なぜ私は符号付きの文字にインデックスの種類を変更すると、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

なぜ私は 'int'の代わりに' short'を使うのか分かりません。 –

答えて

3

の問題に少しだけを修正してくださいしてみましょう:

char index; 
cin >> index; 

問題を見ることが容易であろう。 charに入力を読み込むと、ユーザーが入力した最初の文字の文字コードが取得されます。典型的なシステムでは、これはASCIIで、数字のコードは48と57の間です。

indexに入力すると、符号付き文字の場合は> 48になります。

+0

ありがとう!私は 'signed char'は' char'とは異なり、 'signed char'はちょうど1バイトの整数であると考えました。 –

+0

@AlarmedDino 'char'と' signed char'は両方とも1バイトの整数です。違いは '演算子>>(istream&、char&)'は '演算子>>(istream&、short&)'とは異なる動作をしていることです。 –

0

これは、ユーザーが0〜25の値を入力すると、評価される値がASCIIテーブル0 == 48(ascii)に関連するためです。データ型charは、入力された最初の値の1桁/文字のみになります。 char foo = "1"

関連する問題