cin的详细用法--day2

0、#include

(1)istream cin; //定义一个输入类对象

cin:标准输入类对象占用一定的内存空间

cin>>a;  (运算符重载)

功能:用于从标准的输入设备中获取内容并且保存到指定内存中

特点:可以用于获取不同数据类型

    可以用于连续输入,不过用"空格" "/" "Enter"来分隔  //cin>>a>>b;

    不可以在后面加上endl;

    cin可以调用方法

    cin如果想要获取不确定字符串内容,不要采用自定义数据形式

(2)get方法

class istream

{

//定义一个get方法

int_type get();

__istream_type&get(char_type&__c); //get函数传参不一样,个数不一样,可以同名

__istream_type&get(char_type*__s,streamsize__n,char_type__delim);

__istream_type&get(char_type*__s,streamsize__n);

.......

}

函数重载

1、cin.get()

   它是一个读取单个字符方法。字符变量=cin.get =>cin.get(字符变量)

#include

using namespace std;

int main()

{

char str;

str = cin.get();//cin.get(str);

cout<

systerm("pause"); //进行停止,否则会一闪而过

}

  1. include  
  2. using namespace std;  
  3.    
  4. int main()  
  5. {  
  6.   char str1;  
  7.   char str2;  
  8.   str1 = cin.get(); //读取单个字符,在屏幕输入  
  9.   str2 = cin.get();  
  10.   cout<//输出刚刚载入的单个字符  
  11.   system("pause");  //进行暂停,否则会一闪而过  
  12. }  
输入:abcd   输出:ab

既然cin.get()是读取第一个字符,那str2为什么不也是a呢?
原理如下:
    在cin这个对象里,有一个储存字符的流,可以想象成缓冲区,事实上是cin里封装的一个东西.当我们在程序上输入字符后,对象cin获得了我们输入的字符。例如获得abcd,然后再通过.get()把流里面的第一个字符去掉,赋给str1,这时,cin里储存的流的数据为bcd,而str1则获得了a。当我们再次运行str2 = cin.get()时,同理把cin里流的数据的b拿出来给了str2,此后,cin里面的流的数据为cd,而str2则为b,所以最后输出时,便能输出ab了。

    还有个补充,究竟什么时候才输入数据呢?我们可以再通过上面的代码进行尝试,我们输入单个字母'a',然后按回车,发现并没有输出数据,而是再等待一次输入数据,我们再输入字母'b',按回车后便输出ab了。相信到这里,大家都应该明白了,因为当我们第一次输入a后,通过str1 = cin.get()使cin里的流没有数据,清空了。所以到第二次要再赋给str2值时,它找不到数据,要重新再输入数据。由此来看可以知道,当cin里的流数据清空时,便需要重新输入才能赋值。而cin.get()还有个用法:

[cpp]  view plain  copy
 print ?
  1. #include   
  2. using namespace std;  
  3.    
  4. int main()  
  5. {  
  6.   char str1;  
  7.   char str2;  
  8.   str1 = cin.get(); //读取单个字符,在屏幕输入  
  9.   cin.get();  
  10.   str2 = cin.get();  
  11.   cout<//输出刚刚载入的单个字符  
  12.   system("pause");  
  13. }  

运行程序后

输入:abcd 输出:ac

    程序中有3个cin.get(),由此可知,当空回调cin.get()时,cin.get便自动在cin中的流数据中删除一个字母,起了一个删除作用。

    对cin.get()有了一定了解之后,对cin.getline()的学习就可以更快了,原理是一致的,但是cin.getline()则是获取一整行文本。以下是cin.getline()原形:
getline(char *line,int size,char='/n')
第一个是字符指针,第二个是字符长度,第三个为结束标识符。

2、cin.getline()

函数作用:从标准输入设备键盘读取一串字符串,并以指定的结束符结束。

1)__istream_type&getline(char_type* __s, streamsize __n)
2)__istream_type&getline(char_type*__s,streamsize__n,char_type__delim);

3)__istream_type&getline(char_type* __s, streamsize __n)
      { return this->getline(__s, __n, this->widen('\n')); }
 
  
.......

#include 
 
  
using namespace std;
 
  
int main()
{
    cout << "Hello World!" << endl;
    char cstr[20];
    cin.getline(cstr,sizeof(cstr),'x');
    cout < 
  
    system("pause");
    return 0;
}
 
  输入:abcdx (enter键)   输出:abcd 
  

       abx(enter键)                   ab

           xabc

3、cin.gount()

	从缓冲区中读取数据,输出(数据)数组的字节数,与cin.get/cin.getline搭配使用


streamsize gcount()  const { return _M_gcount; }
 
  
#include 
#include 
using namespace std;
 
  
int main()
{
    cout << "Hello World!" << endl;
    char cstr[20];
    cin.getline(cstr,10); //从数组中读取十个字节
    cout < 
  
    cout < 
  
    system("pause");
    return 0;
}
 
  输入:abcdefghlip 
  
输出:abcdefghl
	    9     // 从缓冲区中读取数据,返回数据的字节数。还有最后是结束符,不算入字节数
4、cin.ignore()
	cin.ignore(a,ch)方法是从输入流cin中提取字符,提取的字符被忽略,每抛弃一个字符,它都要计数和比较字符:如果字符值达到a或者被抛弃的字符是ch,则函数执行终止。否则它继续等待。
	功能:用来清除以回车键结束的输入缓冲区的内容,消除上一次输入对下一次输入的影响。
	cin.ignore(1024,'\n');通常把第一个参数设置足够大,这样实际上总有只有第二个参数‘\n’起作用。
	int a,b,c;
   	cout<<"input a:";
    	cin>>a;
    	cin.ignore(1024,'\n');
    	cout<<"input b:";
    	cin>>b;
    	cin.ignore(1024,'\n');
   	cout<<"input c:";
   	cin>>c;
    	cout<"\t"<"\t"< 
  
        return 0;
如果没有cin.ignore(),可以一次输入3个参数,用空格隔开就行,但是不美观。
	cin.ignore()不给参数,则默认参数为cin.ignore(1,EOF),即是把EOF前的一个字符清除,EOF是文件结束标志。
5、cin.readsome()VScin.read()
__istream_type&read(char_type* __s, streamsize __n);//读取指定数组字符
streamsizereadsome(char_type* __s, streamsize __n);//读取指定数组字符的字节数

6、cin.unget()

你可能感兴趣的:(cin的详细用法--day2)