首页 > 解决方案 > 更好的方法,而不是在 C++ 中使用 cin.ignore

问题描述

int test, flag = 0;
cin >> test;
while (test--)
{
    if (flag == 0)
        cin.ignore(256, '\n'); // using because of whitespace reading due to cin
    string check;
    getline(cin, check);
    checkPangram(check, check.size());
    flag++;
}

如果我删除第 4 行,那么这个程序不会读取几个测试用例字符串,所以我使用标志值在启动时只执行第 4 行一次。如果你能帮我找到任何通用方法,读取字符串(带空格),这样我即使在 cin 或 getline 之后也可以读取而不会丢失任何输入

标签: c++

解决方案


cin.ignore()您可以在进入循环之前简单地调用:

int test;
if (cin >> test)
{
    cin.ignore(numeric_limits<streamsize>::max(), '\n');
    while (test--)
    {
        string check;
        getline(cin, check);
        checkPangram(check, check.size());
    }
}

或者,您可以使用a从第一行读取std::getline()所有输入:std::istringstreamtest

int test;
string check;

getline(cin, check);
istringstream iss(check); 

if (iss >> test)
{
    if (test--)
    {
        getline(iss, check);
        checkPangram(check, check.size());

        while (test--)
        {
            getline(cin, check);
            checkPangram(check, check.size());
        }
    }
}

推荐阅读