2017-04-09 8 views
5

私は以下のコードでさまざまな入力を試みましたが、メッセージが表示されませんでした: "おっと、ASCII charを入力していませんでした。私はchar型ではないさまざまなUnicode文字を入力しています(ALT +乱数では、基本的にちょうどパンチングしています、例えば、™、š、²、Ž、±)。 ASCII文字std :: cinは、コマンドラインのユーザー入力をchar型の変数に渡すことができませんか?

std::cout << "Would you like to play again? Enter y or n: "; 
std::cin >> yOrN; 
isChar = std::cin.fail(); 
//check if the user did not enter an ASCII char, e.g. test with a Unicode character 
if (isChar) 
{ 
    std::cout << "Oops, you did not enter an ASCII char, let alone one that is y or n!\n"; 
    std::cin.clear(); 
} 

OS:Windowsの10 64ビット、x64ベースのプロセッサ コンパイラ:Visual Studioのコミュニティ2015

Iは、非ASCII文字を抽出」を探して、この問題を解決することができませんでしたcin C++」と最初の3ページを参照してください。

私は非常に新しいStack Overflowです。私がこの質問で規則や行動規範に違反した場合、私を許してください。私はlearncpp.comでC++を学んでいて、このpageの質問2に答えるために私自身のコードを書いています。

更新:私のプログラムがcharが入力されたかどうかを検証する理由はないと思います。しかし、おそらく私はそれが実際にプログラムに必要かどうかについてあまり気にしていなかったことを知りたいと思っていたのかもしれません。

答えて

1

std::cin.fail();は、基本ストリームがデータの読み取りまたは書き込みに失敗した場合にtrueを返します。あなたが提供するエンコーディングとは何の関係もありません。

charは実際にutf-8またはASCIIを認識していないことにも言及する価値があります。単なるバイトです。どちらもC++ストリームはデータのエンコーディングを検証しません。

この場合、Ž(など)はstd::cinの有効な入力です。

あなただけの文字ASCIIを検証したい場合、あなたはそれを自分で行う必要がありますあなたの場合は

std::cin >> c; 
if (c < 0 || c > 127) { /*handle non ASCII chars*/ } 

、あなたがyまたはnに対して検証する必要があります。

std::cin >> c; 
if (c != 'y' && c != 'n') { /*handle invalid input*/ } 
+0

平野 'char'共通システムで127を超えることはありません –

+0

@MM 'char'が実際には符号なしであればどうなりますか? –

+0

どうすればいいですか? OPはMSVC++ 2015を言った。 –

関連する問題