从输入缓冲区读取

时间:2018-05-29 20:29:14

标签: c++ string input

void dr1() {
    int num1 = 0, num2 = 0;
    char str[100];  

    while (str[0] != '|') {
        cout << "Please enter two numbers (enter \"|\" to terminate): ";

        cin >> num1;
        cin >> num2;
        cin.getline(str, 100);

        cout << num1 << num2 << endl;
    }
}

如果用户输入字符串,变量str是否应该从输入缓冲区中读取它?

根据我所学到的,你不能将字符串字符输入int类型,因此它们会留在缓冲区中。如果它们留在缓冲区中,不应该getline()读取缓冲区中剩余的输入吗?

1 个答案:

答案 0 :(得分:1)

如果operator>>无法读取格式化值,则输入确实保留在缓冲区中,并且该流也将进入错误状态,因此后续读取将被忽略并且也会失败。这就是为什么getline()没有按预期读取"|"输入的原因。格式化读取操作失败后,您需要clear()流的错误状态。例如:

void dr1()
{
    int num1, num2;
    char str[100];
    do
    {
        cout << "Please enter two numbers (enter \"|\" to terminate): " << flush;
        if (cin >> num1)
        {
            if (cin >> num2)
            {
                // use numbers as needed...
                cout << num1 << num2 << endl;
                continue;
            }
        }
        cin.clear();
        if (!cin.getline(str, 100)) break;
        if (str[0] == '|') break;
    }
    while (true);
}