C++ cin char read symbol-by-symbol

前端 未结 3 1836
清歌不尽
清歌不尽 2020-12-18 23:28

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

相关标签:
3条回答
  • 2020-12-18 23:35

    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.

    0 讨论(0)
  • 2020-12-18 23:44

    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.

    0 讨论(0)
  • 2020-12-18 23:53

    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;
    }
    
    0 讨论(0)
提交回复
热议问题