int main(int argc, char *argv[]) {
while (true) {
std::cout << "Enter command (with arguments) to profile: ";
std::string command;
std::cin >> command;
std::cout << "Running command: " << command << std::endl;
Process::create(true, command);
}
}
这应该不是一个困难的问题,但我是一名初学C ++程序员。我有以下代码应该无休止地循环,提示并接受用户输入。然后它将输入作为命令运行到我在其他地方创建的函数。
问题是在输入第一个命令后,输出由Process::create
方法打印,当循环返回时,它使用打印的数据而不是接受我自己的输入。我究竟做错了什么?我想我可能需要刷新cin
流或其他东西,但我不知道。
以下是演示我的问题的示例输出:
Enter command (with arguments) to profile: ls
Running command: ls
Enter command (with arguments) to profile: homework8 Homework8.cpp~ Process.cpp~ stats.dat
Homework8 plot_stats.gnu Process.h TestProgram.cpp
Homework8.cpp Process.cpp ProcessStats.h
答案 0 :(得分:2)
使用std :: getline从流中获取字符串,而不是std :: cin&gt;&gt;命令;
std::string command;
std::getline(std::cin, command);
或者在从流
获取之前需要检查std :: cinusing std::cin;
using std::getline;
char line[MAX_LINE]; /* Line buffer */
while(true)
{
/* Get command */
cout << "viettuan@shell:~$ ";
if (!cin)
cin.clear();
else
cin.getline(line, MAX_LINE);
//... Do process here
}
答案 1 :(得分:1)
使用std::getline
获得整行。在第一个空格处执行std::cin >> command;
停止,因此如果您输入带参数的命令,那么您将经历该行循环的多次迭代。
while ( std::getline(std::cin, command )
{
std::cout << "Running command: " << command << std::endl;
Process::create(true, command);
}
// getting here means they closed stdin
答案 2 :(得分:-1)
int main(int argc, char *argv[]) {
while (true) {
std::cout << "Enter command (with arguments) to profile: ";
std::string command;
std::cin >> command;
std::cout << "Running command: " << command << std::endl;
Process::create(true, command);
std::cin.clear();
std::cin.sync();
}
}