zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    django.template.exceptions.TemplateDoesNotExist: login.html 错误处理
    pycharm 如何进行全部搜索
    python调用 sshpass
    sshpass 使用方法
    ssh 绕过The authenticity of host '*.*.*.*' can't be established 直接输入密码
    Django深入----django.db.transaction
    django深入----django.db.transaction
    Flask+ Angularjs 实例: 创建博客
    Python --写excel
    Python --链接Mongodb
  • 原文地址:https://www.cnblogs.com/tracy520/p/7967303.html
Copyright © 2011-2022 走看看