2017-04-09 14 views
5

我試過用下面的代碼傳遞不同的輸入,但是沒有得到打印的信息:「哎呀,你沒有輸入ASCII字符,更不用說是y或n了!」我輸入了不是字符類型的各種Unicode字符(基本上是在ALT +隨機數字中打個招呼,例如™,š,²,Ž,±。這些都沒有產生錯誤.Cin是否默默地忽略或放棄了不是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:視窗10 64位,基於x64的處理器 編譯:Visual Studio的社區2015年

我是不是能夠通過搜索「提取非ASCII字符來解決這個問題cin C++「,看前三頁

我很新的Stack Overflow,所以如果我違反了這個問題的任何規則或行爲準則,請原諒我。我在learncpp.com上學習C++,並正在編寫自己的代碼來回答這個page的問題2。

更新:我想我的程序沒有理由驗證是否輸入了字符。不過,我想也許我很好奇,知道我沒有太在意這個計劃是否真的有必要。

回答

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*/ } 

在你的情況,你需要驗證對yn

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

平原'char'永遠不會超過127在普通系統上 –

+0

@MM如果'char'實際上沒有簽名? –

+0

如果它不是通過? OP說MSVC++ 2015. –

相關問題