有没有办法让用户一次输入多个char数组c ++

时间:2013-07-31 17:24:17

标签: c++ arrays

我目前有一个函数,它接受4个字符的数组,并根据该字符序列返回另一个值。

我想要的是让用户输入一整行字符,然后创建一个循环来遍历每个“字符子组”,然后返回所有这些字符的结果。

我最初的想法是以某种方式使用push_back继续将数组添加到向量中。

我不知道整个数组会有多长,但它应该是3的乘积。

作为一个例子,我现在可以做到:

char input [4] ;
cin >> input;  

int i = name_index[name_number(input)];
cout << name[i].fullName;

但我想要的是用户ti一次输入多个名称缩写

2 个答案:

答案 0 :(得分:2)

我会改变你的样本:

char input [4] ;
cin >> input;  

int i = name_index[name_number(input)];
cout << name[i].fullName;

对此:

string input;
cin >> input;  

const int i = name_index[name_number(input)];
cout << name[i].fullName;

然后您可以开始使用矢量来跟踪多个输入:

vector<string> inputs;
string line;
while (cin >> line)
{
    if (line == "done")
        break;
    inputs.push_back(line);
}

for (unsigned int i = 0; i < inputs.size(); ++i)
{
    cout << "inputs[" << i << "]: " << inputs[i] << endl;
    //const int index = name_index[name_number(inputs[i])];
    //cout << name[index].fullName;
}

您要求line的解释。第while (cin >> line)行尝试从标准输入中获取文本并将其放入line。默认情况下,它会在遇到空格(空格,制表符,返回等)时停止。如果成功,则执行while循环的主体,然后将输入内容添加到vector 。如果没有,那么我们假设我们处于输入结束并停止。然后我们可以处理vector。 (在下面链接的代码中,我只是输出它,因为我不知道name_indexname_number是什么。

Working code here

答案 1 :(得分:-1)

cin的工作方式是,它会接受任意数量的输入并用空格分隔它们,当你要求特定输入时它会提示用户输入,然后只取第一个字符串(直到空格)。如果之后还有其他输入,则另一个cin >> input将只检索该值而不再提示用户。当只剩下换行符时,您可以判断何时到达输入的实际结束。此代码应允许您键入由空格分隔的多个字符串,然后在用户输入文本后立即处理它们:

char input[4];
do // Start our loop here.
{
    // Our very first time entering here, it will prompt the user for input.
    // Here the user can enter multiple 4 character strings separated by spaces.

    // On each loop after the first, it will pull the next set of 4 characters that
    // are still remaining from our last input and use it without prompting the user
    // again for more input.

    // Once we run out of input, calling this again will prompt the user for more
    // input again. To prevent this, at the end of this loop we bail out if we
    // have come accros the end of our input stream.
    cin >> input;

    // input will be filled with each 4 character string each time we get here.
    int i = name_index[name_number(input)];
    cout << name[i].fullName;
} while (cin.peek() != '\n'); // We infinitely loop until we reach the newline character.

编辑:另外,请记住,仅向input分配4个字符并不能解释最终将添加的字符串字符'\0'的结尾。如果用户输入4个字符,那么当它将字符串分配给input时,它实际上将访问不良内存。有4个字符+ 1个结束字符,这意味着您需要为input分配至少5个字符。最好的方法是使用std::string,因为即使用户输入超过4个字符,它也会正确调整大小。