这是学习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块