2016-09-12 4 views
-2

次のプログラムはコンパイルされません。cinがtypecasetで動作しない

#include <iostream> 
#include <cstdio> 
using namespace std; 

int main(){ 
    char c; 
    cin >> (int)c;  // stat 1 
    //scanf("%d", &c); //stat 2; this when complied gives warning 
    cout << c << endl; 
} 

Q1。 cinを使用して文字のASCII値を受け入れる方法char変数を使ってやりたい

Q2。ユーザーの入力値が文字の範囲内にあることを確認する場合は、stat 2常にとなります。

答えて

4

たとえば、入力することができます。 97、出力は'a'?その後、実際のintを読み込み、int変数を出力内の文字にキャストします。私。あなたが今何をすべきかのほぼ反対:

int c; 
std::cin >> c; 
std::cout << static_cast<char>(c); 

あなたが入力が有効な文字であることを確認するには、その後、例えば使用std::isalphaまたは他の1つcharacter classification functions

+0

ありがとうございました@ Joachim-Pileborg。しかし、私の質問は、 'cin'で型キャスト(int)を使うことです。あなたが与えた説明は問題を解決しますが、私は 'cin'を使って型キャスティングについて知りたいと思います。 –

+2

@DeepakAggarwal '(int)c'は、一時的に作成したため動作しません。 '(int)c'はcをint *として扱いません。 * c *の値を持つintを作成します。 – NathanOliver

+0

@DeepakAggarwalより正確には、入力演算子関数は非const参照引数をとり、 '(int)c'は非const参照にバインドできないrvalueを作成します。 –

関連する問題