Som*_*dom 6 c++ operator-precedence
我试图制作一个简单的shell程序,看一些例子已经看到大多数人使用getline()来获取输入,但是我一直在尝试使用read()并注意到一个奇怪的错误,我想知道是否其他人们看到或知道原因.
当我使用getline运行代码时,一切正常.运行程序后,我会显示终端名称,并准备好接受输入.当我使用read时,它似乎是在接受输入后执行shell的名称.无论我做什么,这似乎都会发生.显示shell名称的行是
cout << "SweetShell-> ";
Run Code Online (Sandbox Code Playgroud)
然后在这一行之后我运行read命令,或者甚至调用另一个进程然后运行read命令,并且在输入之后打印"SweetShell->".
即使在测试期间我也有一块代码,如:
cout << "SweetShell-> ";
int test = read(0,buf,MAX_ARGS);
//temp is a string that is set to the input
cout << temp << " " << test;
Run Code Online (Sandbox Code Playgroud)
输出看起来像这样:
3SweetShell-> ls
Run Code Online (Sandbox Code Playgroud)
意思是它打印空格,然后测试,然后是第一个cout,最后是temp.任何人都知道这是怎么回事?
Set*_*son 11
您应该尝试"刷新"输出缓冲区以确保它按顺序打印.尝试:
cout << "SweetShell-> " << std::flush;
int test = read(0,buf,MAX_ARGS);
//temp is a string that is set to the input
cout << temp << " " << test << std::flush;
Run Code Online (Sandbox Code Playgroud)