gpt4 book ai didi

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

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

这段代码:

$ 猫垃圾.cpp

#include <stdio.h>
#include <malloc.h>
#include <iostream>
#include <string>

using namespace std;

int
main(int argc, char **argv)
{
string line;

while(getline(cin, line))
{
cout << line << endl;
}

return 0;
}

如果我运行它就可以正常工作,然后输入“hi”和“there”

$垃圾你好你好那里那里

到目前为止一切顺利。

但是我有另一个程序:

$猫junk1.c

#include <stdio.h>

int
main(int argc, char **argv)
{
int i = 4;

while(i--)
{
printf("abc\n");
sleep(1);
}

return 0;
}

这个输出 4 行 "abc\n"并在每行之后休眠。

如果我这样做:

垃圾1 |垃圾

我希望看到每行“abc”后跟一个 1 秒的 sleep ,但我看到的是 4 秒的 sleep ,最后是所有 4 个“abc”行。

显然 getline() 正在缓冲来自 junk1 的所有输出,并且仅在 junk1 终止时才继续。

这不是我需要的行为,因为我想将 stdout 从一个永远运行并产生大量输出的程序通过管道传输到像 junk.cpp 这样的程序。

知道这里发生了什么吗?

谢谢!

最佳答案

这可能是由于 junk1.c 中的 stdout 被缓冲造成的:所有写入它(通过 printf 或任何其他方式)都是收集在内存缓冲区中,仅在程序退出时写入 stdout

要强制 stdout 实际写入缓冲区中的内容,您必须使用 flush(在您的情况下,您应该在每个 printf 之后使用它)。

关于c++ getline 似乎无法识别通过管道传输到标准输入的输入中的换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33922740/

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