gpt4 book ai didi

c++ - std::getline 在 for 循环中不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:55:51 26 4
gpt4 key购买 nike

我正在尝试将用户的输入收集到一个字符串变量中,该变量在指定的时间内接受空格。

因为通常的 cin >> str 不接受空格,所以我会使用 中的 std::getline

这是我的代码:

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
int n;
cin >> n;
for(int i = 0; i < n; i++)
{
string local;
getline(cin, local); // This simply does not work. Just skipped without a reason.
//............................
}

//............................
return 0;
}

有什么想法吗?

最佳答案

如果输出存储在 local 中的内容(顺便说一下,这是一个糟糕的变量名 :P),你就会明白为什么会失败:

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
int n;
cin >> n;
for(int i = 0; i < n; i++)
{
string local;
getline(cin, local);
std::cout << "> " << local << std::endl;
}

//............................
return 0;
}

您会看到它在输入您的号码后立即在 > 之后打印一个换行符。然后继续输入其余部分。

这是因为 getline 为您提供了输入号码后留下的空行。 (它读取数字,但显然没有删除 \n,所以你留下了一个空行。)你需要先去掉所有剩余的空格:

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
int n;
cin >> n;
cin >> ws; // stream out any whitespace
for(int i = 0; i < n; i++)
{
string local;
getline(cin, local);
std::cout << "> " << local << std::endl;
}

//............................
return 0;
}

这按预期工作。

题外话,也许它只是针对手头的代码片段,但如果您没有 using namespace std;,代码往往更具可读性。它违背了命名空间的目的。不过,我怀疑它只是为了张贴在这里。

关于c++ - std::getline 在 for 循环中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2039918/

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