C++编程输入数组的处理——不给数组长度,直接给一行数组

 ———————————————— 

正常情况下,我们要从键盘读一个数组,一般会先告诉你一个数组大小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 getchar(void) 从标准输入 stdin 获取一个字符(一个无符号字符)。

 

int main()
{   
       vector<int> a;
       int i = 0;
       do{
              cin >> i;
              a.push_back(i);
       }while(getchar() !='\n');
       return 0;
}

注意不要如下使用while循环的形式,getchar会消耗掉一个字符。

while(getchar() != '\n')
	{
		cin>>i;
		a.push_back(i);
	}

输出的vector会缺少输入的第一个字符

while (getchar()!='\n') ;  表示循环读入字符,直到读到回车符结束循环。这个语句,还可以做到清除输入多余的字符,如:

char ch[11]; //最多能存储10个字符
getline( ch, 10 ); //输入10个字符,可是用户有可能输入10个以上的字符,于是可用上面的语句来清除缓存的数据。
while (getchar()!='\n') ;
//这样,后续的读数据操作,就不会受这里的输入影响了。

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值