重头在学c++,小白总是会提出一些问题。。。琢磨一段时间,终于有了一套能说服我自己的理由了,cin用法解释如下:
1.提出问题:
在看看c++primer plus 的时候,看到了下面的程序
#include "stdafx.h"
#include<iostream>
const int MAX=5;
int main()
{
using namespace std;
int golf[MAX];
cout<<"please input your golf scores"<<endl;
cout<<"you must enter "<<MAX<<"rounds"<<endl;
int i;
for(i=0;i<MAX;i++)
{
cout<<"round #"<<i+1<<endl;
while(!(cin>>golf[i]))
{
cin.clear();//cin.clear()是什么意思呢?
while(cin.get()!='\n')//
continue;
cout<<"please input a number"<<endl;
}
}
double total=0.0;
for(i=0;i<MAX;i++)
total+=golf[i];
cout<<"thr average ="<<total/MAX<<endl;
return 0;
}
恩,
就是这个cin.clear()没看懂,刚开始理解成清除cin的东西,但是确实不太对。。。所以开始了慢慢探索路程。。。。。
2.预备知识:
cin.get()和cin.getline(),cin.clear(),cin.sync()等的用法.
感谢博主:http://blog.youkuaiyun.com/SearchLife/article/details/3491768
2.1 cin.get()
首先看看cin.get(),它是一个读取单个字符的方法.
字符变量=cin.get();相当于cin.get(字符变量);
#include <iostream>
using namespace std;
int main()
{
char cstr;
cstr=cin.get(); //读取单个字符,在屏幕输入,也相当于cin.get(cstr);
cout<<cstr<<endl; //输出刚刚载入的单个字符
system("pause");
}
运行程序后,一切正常:
输入:a 输出:a
但当我们输入的不只一个英文字符时,那又会如何呢?
输入:abcd 输出:a
由此可知,它只能读取第一个字符,但如果我们把程序修改成:
int main()
{
char cstr;
char bstr;
cstr=cin.get(); //读取单个字符,在屏幕输入
bstr=cin.get();
cout<<cstr<<bstr<<endl; //输出刚刚载入的单个字符
system("pause");
}
我们再输入:abcd 最后输出了:ab
既然cin.get()是读取第一个字符,那bstr为什么不也是a呢?
其实原理是这样的:
在cin这个对象里,有一个储存字符的流,可以想象成缓冲区,但事实上是cin里封装的一个东西.当我们在程序上输入字符后,对象cin获得了我们输入的字符,例如获得abcd,然后再通过.get()把流里面的第一个字符去掉,赋给cstr,这时,cin里储存的流的数据为bcd,而cstr则获得了a.当我们再次运行bstr=cin.get();时,同理把cin里流的数据的b拿出来给了bstr,此后,cin里面的流的数据为cd,而bstr则为b,所以最后输出时,便能输出ab了.
还有个补充,究竟什么时候才输入数据呢?我们可以再通过上面的代码进行尝试,我们输入单个字母'a',然后按回车,发现并没有输出数据,而是再等待一次输入数据,我们再