告诉cin停止阅读换行符

时间:2012-03-12 19:42:31

标签: c++

假设我想从输入中读取整数行a,如下所示:

1 2 3 4 5\n

我希望cin停在'\ n'字符处,但cin似乎不认识它。

以下是我使用的内容。

vector<int> getclause() {
  char c;
  vector<int> cl;

  while ( cin >> c && c!='\n') {    
    cl.push_back(c);
    cin>>c;
  }
  return cl;
}

我应该如何修改它以便cin在看到'\ n'字符时停止?

6 个答案:

答案 0 :(得分:29)

使用getline和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;
}

答案 1 :(得分:2)

您可以使用getline方法首先获取该行,然后使用istringstream从该行获取格式化输入。

答案 2 :(得分:1)

使用std :: getline,这样就可以了解

答案 3 :(得分:1)

您可以通过在let mention = /<@(.*?)>/; 上设置noskipws来读取所有空格:

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; } 构建向量:

istream_iterator

答案 4 :(得分:0)

在这种情况下使用字符时,

getchar()cin更有效率

我尝试对长度未知的字符行执行相同的操作,并希望它在换行处停止,但是它具有无限循环,并且没有检测到换行,因此我只使用了getchar()而不是cin可行

答案 5 :(得分:-1)

通过此link,实现此目标非常简单。

#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;
}