我希望用户输入一个字符。我想过滤他们输入的内容,只选择他们输入的第一个字符。
int main(){
while (true){
char n = readOption();
cout << n << std::endl;
}
return 0;
}
char readOption() {
char input = '\0';
while (input != '\n') {
input = cin.get();
if (isalpha(input)) {
break;
}
}
return toupper(input);
}
如果我输入13@ jkjoi
,控制台就会打印出来。
J
K
J
O
I
我只想打印J
。为什么还打印其他字母?
答案 0 :(得分:2)
它正在打印所有字符,因为(在修复分号错误后),您将永远循环:
while (true)
{
char n = readOption();
cout << n << std::endl;
}
这将永远地反复调用您的读取功能!你的read函数循环直到他得到一个alpha字符,所以它忽略"13@ "
然后为while (true)
循环的每次迭代抓取1个字符。如果您希望在读取第一个字母字符后停止,请不要循环:
char n = readOption();
cout << n << std::endl;
<强>更新强>
根据您的评论,您实际上可以完全重写您的代码:
std::locale loc;
char c = '\0';
do
{
// get a character with error checking
while (!(std::cin >> c))
{
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
} while (!std::isalpha(c, loc));
// ignore the rest of the input
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
答案 1 :(得分:2)
因为你问过它。
你永远在循环中执行此操作。
如果你只想做一次,那就干一下吧。删除你的循环。