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

C++ c++;getline似乎无法识别通过管道传输到stdin的输入中的换行符,c++,getline,C++,Getline,此代码: $cat junk.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 <&

此代码:

$cat junk.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;
}
#包括
#包括
#包括
#包括
使用名称空间std;
int
主(内部argc,字符**argv)
{
弦线;
while(getline(cin,line))
{

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


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

还请注意,在单独测试junk1
时,您可能不会看到这种行为,因为如果stdout转到终端,默认情况下它将是行缓冲的。管道输出会导致完全缓冲。回答非常好,这就解决了它。我完全忘记了缓冲输出。谢谢!!!
#include <stdio.h>

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

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

    return 0;
}