How to Flush the Cin Buffer

How do I flush the cin buffer?

Possibly:

std::cin.ignore(INT_MAX);

This would read in and ignore everything until EOF. (you can also supply a second argument which is the character to read until (ex: '\n' to ignore a single line).

Also: You probably want to do a: std::cin.clear(); before this too to reset the stream state.

Proper way to flush cin input

Answered by mikedu95 in a comment:

Read a whole line with getline, then perform string to integer conversion using stoi

#include <string>
#include <iostream>
using namespace std;

string str;
int a, b, c, d;

void main()
{
cout << "Reading a" << endl;
getline(cin, str);
a = stoi(str);

cout << "Reading b" << endl;
getline(cin, str);
b = stoi(str);

cout << "Reading c" << endl;
getline(cin, str);
c = stoi(str);

cout << a << " " << b << " " << c << endl;
system("pause");
}

How to clear cin buffer after reading char

You asked:

Is there any function to reset or clear buffer of cin.

There is std::istream::ignore(). There is example code at the given link which shows how to use the function.

In your case, I see something like:

int i;
int c;
std::cin >> c;
std::cin >> i;

if (std::cin.bad()) {
std::cin.clear(); // unset failbit
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // skip bad input
std::cin >> i;
}

Clear the cin buffer before another input request, c++

You might use ignore to drop the newline from the buffer (e.g. drop X characters before the newline as delimiter). Extraction and ignore stop when the delimiter is extracted.

e.g.

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

Also related: Why would we call cin.clear() and cin.ignore() after reading input?

How to prevent `std::cin` or `\n` from flushing the buffer of `std::cout`?

You could write to your own std::stringstream buffer, and then output that to std::cout when you're ready.

MWE:

#include <iostream>
#include <sstream>
#include <stdexcept>
#include <vector>

using std::cin;
using std::cout;
using std::istream;
using std::runtime_error;
using std::stringstream;
using std::vector;

static auto get_int(istream& in) -> int {
int n;
if (!(in >> n)) {
throw runtime_error("bad input");
}
return n;
}

int main() {
auto ss = stringstream();
auto v = vector<int>();
auto size = get_int(cin);

while(size--) {
auto n1 = get_int(cin);

if (n1 == 0) {
auto n2 = get_int(cin);
v.push_back(n2);
} else if (n1 == 1) {
auto n2 = get_int(cin);
ss << v[n2] << '\n';
} else if (n1 == 2) {
v.pop_back();
}
}

cout << ss.str();
}


Related Topics



Leave a reply



Submit