There are several ways to read one character at a time until you have read them all, and none of them is necessarily the best.
Personally, I’d go with the following code:
char c;
while (cin.get(c)) {
// Process c here.
}
If you only need to read m
characters, consider using a for
loop:
char c;
for (unsigned int i = 0; i < m && cin.get(c); ++i) {
// Process c here.
}
This runs the loop as long as two conditions are fulfilled: (1) less than m
characters have been read, and (2) there are still characters to read.
However, both solutions have a drawback: they are relatively inefficient. It’s more efficient to read the m
characters in one go.
So first allocate a big enough buffer to store m
chars and then attempt to read them:
std::vector<char> buffer(m);
cin.read(&m[0], m);
unsigned total_read = cin.gcount();
Notice the last line – this will tell you whether m
characters have been actually read.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…