gpt4 book ai didi

c++ - 'cin' 和 'getline' 问题的真正解决方案

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:44:34 27 4
gpt4 key购买 nike

当我不确定是否会在 getline 之前得到 cin 时,如何去掉前导 ' ' 和 '\n' 符号?

例子:

int a;
char s[1001];
if(rand() == 1){
cin >> a;
}

cin.getline(s);

如果我在 getline 之前放置一个 cin.ignore() ,我可能会丢失字符串的第一个符号,那么我唯一的选择是在每次使用 'cin >>' 之后放置它吗?因为当您从事大型项目时,这样做的效率不是很高。

有没有比这更好的方法:

int a;
string s;

if(rand() == 1){
cin >> a;
}

do getline(cin, s); while(s == "");

最佳答案

像这样:

std::string line, maybe_an_int;

if (rand() == 1)
{
if (!(std::getline(std::cin, maybe_an_int))
{
std::exit(EXIT_FAILURE);
}
}

if (!(std::getline(std::cin, line))
{
std::exit(EXIT_FAILURE);
}

int a = std::stoi(maybe_an_int); // this may throw an exception

您可以用几种不同的方式解析字符串 maybe_an_int。您还可以使用 std::strtol 或字符串流(在与第一个 if block 相同的条件下):

    std::istringstream iss(maybe_an_int);
int a;
if (!(iss >> a >> std::ws) || iss.get() != EOF)
{
std::exit(EXIT_FAILURE);
}

您当然可以更优雅地处理解析错误,例如通过循环运行整个过程,直到用户输入有效数据。

关于c++ - 'cin' 和 'getline' 问题的真正解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23489008/

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