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