cin输入详解

基本原理:

一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据。当输入缓冲区中没有数据时,会请求键盘输入;否则,不会请求。

一、cin>>

输入结束条件:遇到enter,space,tab字符;

读取时对字符的处理:会自动跳过enter,space,tab字符;

结束时不会丢弃结束字符。

测试:

#include<iostream>
using namespace std;
int main()
{
    char c1,c2,c3;
    cin >> c1;
    cin.get(c2);
    cout << c1 << endl;
    cout << c2 << 1 << endl;
    return 0;
}

结果:

分析:输入1(enter),cin>>读取字符1,cin.get()读取换行符,输出时先输出1,再换行,再输出1,再换行。

二、cin.get()和cin.get(数组名,长度,结束符)

cin.get();

char ch = cin.get()等价于cin.get(ch)。可以用来获取任意字符,包括enter,space,tab。

读取字符:

输入结束条件:无;

读取时不跳过任何字符,单个读取;

结束时不丢弃字符。

测试:

#include<iostream>
using namespace std;
int main()
{
    char ch1,ch2;
    cin.get(ch1);
    cin.get(ch2);
    cout<<ch1<<endl;
    cout<<ch2<<2<<endl;
    return 0;
}

结果:

分析:cin.get(ch1)读取了字符1,cin.get(ch2)读取了换行符。

cin.get(数组名,长度,结束符):

结束符为可选参数,读入的字符个数最多为长度-1个,结束符规定结束字符串读取的字符,默认为enter。

输入结束条件:结束符或者输入大于指定长度-1时;

读取时对字符的处理:不跳过空格,tab,enter,读取长度小于指定长度-1的字符,直至遇到enter结束;

结束时不丢弃任何字符。

测试:

#include<iostream>
using namespace std;
int main()
{
    char ch,a[5];
    cin.get(a,5);
    cin.get(ch);
    cout<<a<<endl;
    cout<<(int)ch<<" "<<1<<endl;
    return 0;
}

结果1:

 

分析:

输入1234(enter),读取时读到enter字符时已经是第五个了,所以结束,读ch时读的是enter。

结果2:

分析:

假如直接按enter,会结束读取字符串a,但是这个时候ch的值并不是10,而是0,enter貌似被丢弃了。。。

三、cin.getline()

cin.getline(数组名,长度,结束符) 大体与 cin.get(数组名,长度,结束符)类似。

区别在于:

cin.get()当输入的字符串超长时,不会引起cin函数的错误,后面的cin操作会继续执行,只是直接从缓冲区中取数据。但是cin.getline()当输入超长时,会引起cin函数的错误,后面的cin操作将不再执行。

cin.getline()是以enter为结束标志的,同时丢弃了enter。

测试:

#include<iostream>
using namespace std;
int main()
{
    char ch,ch2,a[5];
    cin.getline(a,4);
    cin.get(ch);
    cin.get(ch2);
    cout<<a<<endl;
    cout<<ch<<endl;
    cout<<ch2<<1<<endl;
    return 0;
}

结果:

分析:

输入123(enter),读取123,遇到enter,结束读取字符串,同时丢弃enter,接着读入1和enter,输出时先输出字符串123,再输出1和enter,再输出1。

 

posted on 2017-12-03 21:05  Tracy-mac  阅读(2165)  评论(0编辑  收藏  举报

导航