可能之前已经问了100次,但是我找不到或者没有找到解决方案.所有东西(据我所测试)都被识别出来,只有紧迫的空间不起作用.我正在键入空格+点击输入,光标只是移动到下一行,没有任何反应.我怎样才能做到这一点?
#include <cstdlib>
#include <iostream>
#include <cctype>
using namespace std;
int main(int argc, char** argv) {
cout << "Press a key please: " << endl;
char key;
cin >> key;
if (isalpha(key))
cout << key << " is a letter." << endl;
else if (isdigit(key))
cout << key << " is a number." << endl;
else if (isspace(key))
cout << key << " is a space." << endl;
else if (ispunct(key))
cout << key << " is a punctuation" << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当您使用格式化的输入函数(即operator>>())时,默认情况下输入将跳过前导空格.如果要读取char可能是空格的空格,则需要使用std::noskipws操纵器禁用此跳过:
if (std::cin >> std::noskipws >> c) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用未格式化的输入函数,例如,get()在不更改流设置的情况下读取单个字符:未格式化的输入函数不会跳过前导空格(在格式化输入之间切换时通常会导致悲伤,例如,对于a int和未格式化的输入输入,例如,使用以下方式读取一行std::getline():
if (std::cin.get(c)) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
另请注意,您只能将正值(和EOF)传递给任何is....()函数,但char在许多平台上都已签名.您需要首先将您char转换为合适的值,例如,使用其中一个
isspace(static_cast<unsigned char>(c))
isspace(std::char_traits<char>::to_int_type(c))
Run Code Online (Sandbox Code Playgroud)