如何在用户点击进入时停止使用cin循环?

时间:2013-11-27 23:26:41

标签: c++ loops while-loop user-input cin

这是我现在的C ++代码:

// Prompt user loop
char preInput;
do {
    // Fill the vector with inputs
    vector<int> userInputs;
    cout << "Input a set of digits: " << endl;
    while(cin>>preInput){
        if(preInput == 'Q' || preInput == 'q') break;
        int input = (int) preInput - '0';
        userInputs.push_back(input);
    }       

    // array of sums sync'd with line #
    int sums[10] = {0};

    // Calculate sums of occurance
    for(vector<int>::iterator i = userInputs.begin(); i != userInputs.end(); i++){
        int currInput = *i;
        for(int numLine = 0; numLine < lines.size(); numLine++){
            sums[numLine] += lineOccurances[numLine][currInput];
        }
    }

    int lineWithMax = 0;
    for(int i = 0; i < 10; i ++)        
        if(sums[i] > sums[lineWithMax]) lineWithMax = i;

    cout << lines[lineWithMax] << endl;

    // Clear vector
    userInputs.clear();
} while (preInput != 'Q' && preInput != 'q')

不要担心循环的功能,我只需要它以某种方式运行。 如果用户键入“123”,则循环应将字符1,2,3作为单独的元素加载到userInputs中。 点击进入后,循环需要执行while(cin&gt;&gt;&gt; preInput){}语句下面的所有代码,清除userInput向量,然后重复直到输入字符Q.这不是正在发生的事情。循环当前写入的方式,程序接受用户输入,直到用户点击Q,输入基本上什么都不做。我需要在用户点击进入时执行代码。我已经玩了一段时间,但我不太熟悉通过cin将数据通过char转换为矢量,所以我不知道如何做到这一点......有人能指出我正确的方向吗?

将cin&gt;&gt; preInput更改为getline工作?或者这会尝试将值“... 123”作为一个赋值放入char preInput?我需要向量分别接收数字而不是一起作为一个元素。重申一下,如果用户输入“123”,则userInputs [0]应为1,userInputs [1]应为2 ...依此类推。

基本上,唯一需要改变的是当用户点击进入时,while(cin&gt;&gt;&gt; preInput){}循环必须中断。

1 个答案:

答案 0 :(得分:1)

使用getline读取一行,然后使用istringstream将该行拆分。

std::string line;
std::getline(std::cin, line);
std::istringstream iss(line);

while(iss>>preInput){
    if(preInput == 'Q' || preInput == 'q') break;
    int input = (int) preInput - '0';
    userInputs.push_back(input);
}

或者,既然你一次只看一个角色,你可以直接查看字符串的字符。

for (char c : line)
{
    if (c == 'Q' || c == 'q') break;
    int input = c - '0';
    userInputs.push_back(input);
}