正常情况下,我们要从键盘读一个数组,一般会先告诉你一个数组大小size,然后可以创建相应的数组a[size](注:C++11允许变量作为数组长度)或者建立vector<T>(size). 然后就可以用一个size次的循环正好把size个数组元素存进去。
int
main()
{
int
n = 0;
cin >> n;
vector
<
int
> p(n);
for
(
int
i = 0; i < n; i++){
cin >> p[i];
}
return
0;
}
但是如果不给数组长度怎么办?直接扔给你一个行数组元素,怎么把他们存到对应整数数组中呢?
1.while(cin>>a[i++])好像是不可以的。cin>>操作符是根据后面变量的类型读取数据。
输入结束条件 :遇到Enter、Space、Tab键。 对结束符的处理 :丢弃缓冲区中使得输入结束的结束符(Enter、Space、Tab)
在VS2103中,输入一行数组元素之后他不会终止,会让你继续输入。
2.这种方法使用getchar和cin共同进行处理。假设输入为-1,1,-1,1。首先,cin>>会根据i的类型读一个int,他遇到space会终止,因此第一次得到-1,接着每次getchar都会得到一个空格,这时候继续读就会读到第二个元素1,一直while到终止条件,读到一个换行符“\n”.
int
main()
{
vector
<
int
> a;
int
i = 0;
do
{
cin >> i;
a.push_back(i);
}
while
(getchar() !=
‘\n’
);
return
0;
}
3.使用getline(cin, str)读到一行字符串,然后将getline得到的stringstream input中,然后input>>输出会被space截断,直接>>到一个int类型这种就可以自动实现类型转换,也很方便。当然也可以用atoi。
#include
<sstream> //注意加这个头
int
main()
{
string
str,temp;
getline(cin, str);
int
i = 0;
vector
<
int
> p;
stringstream
input(str);
while
(input >> i){
p.push_back(i);
}
return
0;
}