0

我想指出我不擅长 C++,我通常使用 C,但我认为了解一些 C++ 基础会很好,所以我需要将数据发送到服务器并且普通 std::cin >> 变量不能做这是因为它只读取空间的输入,所以我阅读了有关 getline 的信息,它工作得很好,但是当我在无限循环中做一些事情时:

for (;;)
{
std::cout << "Hello" << std::endl;;
std::getline(std::cin,darek.wiadomosc);
}

在第一次迭代时,它会在屏幕上显示双重 Hello,例如:正在输入的 Hello Hello 字符串

但是在一个循环之后,它显示一切都很好。我确定这是 getline 的问题,因为当我将其更改为 std::cin >> 只是为了进行测试时,它起作用了。有人可以回答我的简单问题吗?

4

1 回答 1

3

std::cin将终止符留在流中(无论是空格还是换行符)。所以如果你这样做:

std::string foo, bar;
std::cin >> foo;
std::getline(std::cin, bar);

输入为:

Hello
World

bar将以空字符串结尾,而不是“World”,因为getline将在第一个换行符处停止,即“Hello”之后的换行符。

回到你的问题,如果你std::cin >>在循环开始之前有实例,你可能有一个流浪的换行符,使第一次迭代以意想不到的方式表现。您可以使用std::cin.ignore忽略流中留下的任何换行符。

于 2011-03-14T21:11:46.723 回答