C ++循环I / O问题

时间:2014-04-26 20:03:56

标签: c++ io

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

3 个答案:

答案 0 :(得分:2)

使用std :: getline从流中获取字符串,而不是std :: cin&gt;&gt;命令;

std::string command;
std::getline(std::cin, command);

或者在从流

获取之前需要检查std :: cin
using 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();
    }
}