注意:
2
1 2 3
1 2 3
首先cin>>n; 妄图读入2
然后调用getline(cin,str),读入后面的1 2 3,会出现错误,因为cin>>n并未清除换行符,所以getline(cin,str)读入的是换行符,并非第一行,增加一行用于处理换行符就好,或是都用不要混用cin和getline
输入举例(数字以空格分割,每行以“\n”结尾):
1 2 3 4
5 6
不预先给出每一行数学的个数
一、getline+stringstream
C++引入了ostringstream、istringstream、stringstream这三个类,要使用他们创建对象就必须包含sstream.h头文件。
istringstream类用于执行C++风格的串流的输入操作。
ostringstream类用于执行C风格的串流的输出操作。
strstream类同时可以支持C风格的串流的输入输出操作。
//clear(),这个名字让很多人想当然地认为它会清除流的内容。 实际上,它并不清空任何内容,它只是重置了流的状态标志而已!
ss.clear();
//利用str()函数,传入一个空字符串来让其清空内容,也即是清空内存
stream.str("");
总结:stringstream清空分两步:clear()+str("");
str函数主要有4个作用:
1、初始化:stringstreamss.str(string);
2、清空内容:ss.str(“”);
3、指定内容:ss.str(string);
4、将stringstream的内容返回字符串:ss.str();
#include<iostream>
#include<sstream>
using namespace std;
int main()
{
string sin;
stringstream ss;
int num;
getline(cin, sin);
ss.str(sin);
while (ss >> num)
{
cout << num << " ";
}
getline(cin, sin);
ss.clear();
ss.str("");
ss.str(sin);
//ss<<sin;
//cout << s.str();
while (ss >> num)
{
cout << num << " ";
}
system("pause");
return 0;
}
二、cin+getchar()
vector<int> input;
char ch;
int a;
int k;
while (cin >> a)
{
input.push_back(a);
ch = getchar();
if (ch == '\n') break;
}