tell cin to stop reading at newline

后端 未结 6 1376
[愿得一人]
[愿得一人] 2020-11-28 11:27

Suppose I want to read line a of integers from input like this:

1 2 3 4 5\\n

I want cin to stop at \'\\n\' character but cin doesn\'t seem

相关标签:
6条回答
  • 2020-11-28 11:32

    Use std::getline, this will do the trick

    0 讨论(0)
  • 2020-11-28 11:36

    You can use the getline method to first get the line, then use istringstream to get formatted input from the line.

    0 讨论(0)
  • 2020-11-28 11:36

    From this link, it is quite simple to achieve this.

    #include <stdio.h>
    int main(void) {
        int i=0,size,arr[10000];
        char temp; 
        do{
            scanf("%d%c", &arr[i], &temp); 
            i++; 
            } while(temp!= '\n');
    
        size=i; 
        for(i=0;i<size;i++){ 
            printf("%d ",arr[i]); 
        } 
        return 0;
    }
    
    0 讨论(0)
  • 2020-11-28 11:39

    You can read all whitespace by setting noskipws on the istream:

    #include <ios>
    #include <iostream>
    #include <vector>
    
    using std::vector;
    
    vector<int> getc() {
        char c;
        vector<int> cl;
        std::cin >> std::noskipws;
        while (std::cin >> c && c != '\n') {
            cl.push_back(c);
            std::cin >> c;
        }
        return cl;
    }
    

    If the standard input contains only a single line, you might as well construct the vector with the istream_iterator:

    #include <iostream>
    #include <iterator>
    #include <vector>
    
    using std::vector;
    
    vector<int> getc() {
        // Replace char with int if you want to parse numbers instead of character codes
        vector<int> cl{
            std::istream_iterator<char>(std::cin),
            std::istream_iterator<char>()
        };
        return cl;
    }
    
    0 讨论(0)
  • 2020-11-28 11:43

    getchar() is more efficient than cin when working with characters at this situation

    I tried to do the same with a line of characters with unknown length and want it to stop at a newline but it has an infinite loop and haven't detect the newline, so I just used getchar() instead of cin and it works

    0 讨论(0)
  • 2020-11-28 11:56

    Use getline and istringstream:

    #include <sstream>
    /*....*/
    vector<int> getclause() {
      char c;
      vector<int> cl;
      std::string line;
      std::getline(cin, line);
      std::istringstream iss(line);
      while ( iss >> c) {    
        cl.push_back(c);
      }
      return cl;
    }
    
    0 讨论(0)
提交回复
热议问题