C++ Getline简单错误

标签 c++ getline

<分区>

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

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

在第一次迭代过程中,它在屏幕上显示了 double Hello,如下所示: 你好 你好 正在输入的字符串

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

最佳答案

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 忽略流中留下的任何换行符。

关于C++ Getline简单错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5304470/

相关文章:

c++ - 你如何连接两个字符串?

c++ - 函数声明中的 `*&` 是什么意思?

c++ - std::getline() 在从流中读取格式化输入后读取错误数据

c# - 按顺序获取文件中的行的最佳方法?

c - 获取线();在C中不要停止输入

c++ - 在没有 CRT、memcpy 和 memset 内部函数的情况下构建时出现链接错误

c++ - 生成文件 |对头文件中包含的另一个头文件的依赖

c++ - 将元素添加到链表的区别

c++ - 当从文件中使用 getline 时,While Loop 只循环一次

c++ getline 似乎无法识别通过管道传输到标准输入的输入中的换行符