如何在读取之前清除`std :: cin`的内容?

时间:2015-10-01 19:50:32

标签: c++ iostream cin

我正在尝试多次读取单个字符 。问题是我需要防止用户错误。例如:

char arr[10];
for(int i = 0; i < 10; i++)
{
    cin.get(arr[i]);
} 

输入应该类似于a, b, c, d, ...。但是,如果有人要为第一个条目输入ab,我想要捕获a,然后忽略b。我知道cin.ignore然而,我不知道如何忽略任意数量的字母数字字符或符号,因为我想忽略可能无限数量的字符然后再次忽略和读取。

如何忽略任意数量的字符,然后停止忽略如何实际刷新cin的缓冲区。

3 个答案:

答案 0 :(得分:1)

大多数输入都是换行符,因此如果您想要忽略输入流中的所有字符,直到您遇到换行符,那么您可以使用:

std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n')

由于我们忽略了streamsize,因此输入缓冲区中不应该有额外的内容。

答案 1 :(得分:0)

如果您希望用户在每个符号后按Enter键,则代码可以像这样简单:

char arr[10];
for(int i = 0; i < 10; )
{
    std::string line;
    std::getline( std::cin, line );
    // check that line is not empty
    if( line.empty() ) {
         std::cout << "missing input" << std::endl;
         continue;
    }
    arr[i++] = line[0]; // get only first symbol and ignore the rest
} 

如果您有其他想法,我担心这不适用于std::cin - 在用户按下回车之前,您看不到任何输入。在这种情况下,您必须使用特定于操作系统的函数来获取无缓冲的输入。

答案 2 :(得分:0)

如果您输入的内容如下a 'enter' b 'enter' c 'enter' etc...

,则以下是您需要的代码
#include <iostream>
#include <string>

using namespace std;

int main() {


    char arr[10];
    string line;

    for (int i = 0; i < 10; i++)
    {
        getline(cin, line);
        arr[i] = line[0];

        cout << endl << "Here is the Char: " << arr[i] << endl;
    }



    return 0;
}

但是如果您在一行中输入这样的输入:a,b,c,d,e,f,g,h,i,j 'enter',那么您需要以下代码:

#include <iostream>
#include <string>

using namespace std;

int main() {


    char arr[10];
    string line;
    int i = 0;
    size_t  end;



        getline(cin, line);

        end = 0;
        int counter = 0;



            if (line != "") {

                while (end != string::npos && counter < 10) {

                    if (counter == 0) {
                        arr[counter] = line[0];
                    }
                    else {
                        end = line.find(",", end + 1);
                        arr[counter] = line[end + 1];
                    }

                    counter++;

                }
            }


            for (int i = 0; i < 10; i++) {
            cout << endl << "Here is the Char: " << arr[i] << endl;
        }







    return 0;
    }