假设我想从输入中读取整数行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'字符时停止?
答案 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;
}