读入未知数目的输入方法和该方法的条件测试原理

       这是学习C++基础知识的一点笔记吧。今天主要想记录的是关于【读入未知数目的输入】的输入方法和该方法的测试原理。不知道叫做原理合不合适,但是只是想让读者明白该过程的前前后后吧,这个对于C++的输入流、写代码和今后编程上一些运用能够起点帮助。

       下面直接给出背景:编写程序,要求用户输入一组数。输出信息说明其中有多少个负数。

分析:刚学习的时候,看到这个问题,自己的难点是不知道如何把握“一组数”,这个到底是自己来限定还是完全未知呢?但是在短暂的时间内,本人还是从自己给定这组数的范围来编写了一段代码。

#include <iostream>
int main()
{
std::cout<<"Enter some numbers:"<<std::endl;
int a[10];
for(int i=0;i<10;i++)
{
std::cin>>a[i];
}
int count=0;
for(int i=0;i<10;i++)
{
if(a[i]<0)
count++;
}
std::cout<<"负数个数:"<<count<<std::endl;
system("pause");
}

后来经过继续深入探讨发现一个很好方法来针对“未知数目输入”的输入方法:while(std::cin>>val),那么利用这个方法,再来解答上面问题就完全符合题意了,没有范围的限制。不用编程者自己去限定一组数的范围。接下来就是用了while(std::cin>>val)的代码。

#include <iostream>
int main()
{ 
	std::cout<<"Enter some numbers:"<<std::endl;
	int val,count=0;
	while(std::cin>>val)
	{
		if(val<0)
			count++;
	}
	std::cout<<"负数个数:"<<count<<std::endl;
    	system("pause");
}

       读者结合上面的两种思路,很明显从问题本身出发,第二种完全符合;从代码效率和灵活上,也是第二种要好。难道while(std::cin>>val)这个方法就有这么大的魔力?是的,用起来很方便,但是他的理解过程你真的能懂吗?

      下面就是本人的理解:std::cin>>val标准输入读取下一个数,并将读入的值保存在val中,输入操作符返回其左操作数。while条件测试输入操作符返回的结果。即测试std::cin。

      当我们使用istream 对象作为条件,结果是测试流状态,如果流是有效的,那么测试成功,也就是下一个输入是可能的。那么,这个输入在什么情况下结束呢?当遇到end-of-file 或者无效输入的时候。比如你在输入的时候输入"e"或者"ctrl+z",也就是上面的end-of-file能终止上面的输入。另外如果val是整型,你输入浮点型,如1.1也能终止该输入条件。这个理解应该是很清晰的。

      这个对于那些c++大牛们来说是很基础的,但是对于刚入门的初学者,这个方法和理解都很有帮助,也很重要。

      欢迎大家一起交流~本人的新浪微博:年薪9块


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值