C++ cin char read symbol-by-symbol

吃可爱长大的小学妹 提交于 2019-12-18 05:53:26

问题


I need to read symbol-by-symbol. But I don't know how to read until end of input. As exemple test system will cin>>somecharvariable m times. I have to read symbol-by-symbol all characters. Only m times. How I can do it?


回答1:


If you want formatted input character-by-character, do this:

char c;
while (infile >> c)
{
  // process character c
}

If you want to read raw bytes, do this:

char b;
while (infile.get(b))
// while(infile.read(&b, 1)   // alternative, compare and profile
{
  // process byte b
}

In either case, infile should be of type std::istream & or similar, such as a file or std::cin.




回答2:


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.




回答3:


Try this:

#include <iostream>
using std::cin;
using std::cout;

int main(int argc, char *argv[])
{
    char ch;
    unsigned m = 10;
    while (cin && m--) {
        cin.read(&ch, sizeof(ch));
        cout << ch;
    }
    return 0;
}


来源:https://stackoverflow.com/questions/7679246/c-cin-char-read-symbol-by-symbol

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!