gpt4 book ai didi

c++ - cin.get() 获取太多

转载 作者:行者123 更新时间:2023-11-27 23:09:33 25 4
gpt4 key购买 nike

我希望用户输入一个字符。我想过滤他们输入的内容,只接受他们输入的第一个字符。

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。为什么还要打印其他字母?

最佳答案

它正在打印所有字符,因为(在您修复分号错误之后)您将永远循环:

while (true)
{
char n = readOption();
cout << n << std::endl;
}

这将永远一遍又一遍地调用您的读取函数!你的 read 函数循环直到他得到一个字母字符,所以它忽略 "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');

关于c++ - cin.get() 获取太多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21172125/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com