zoukankan      html  css  js  c++  java
  • (C/C++学习)3.C++中cin的成员函数(cin.get();cin.getine()……)

    说明:流输入运算符,在一定程度上为C++程序的开发提供了很多便利,我们可以避免C语言那种繁琐的输入格式,比如在输入一个数值时,还需指定其格式,而cin以及cout则不需要。但是cin也有一些缺陷,比如当输入字符串时,遇到空格便截止,举个例子,如下,我们在输入“12 23.5 aa bb cc dd”,希望打印出的是前两个数值以及后面一个字符串“aa bb cc dd”,但实际打印出来的只有前两个数字和“aa”。

      1 #include <iostream>
      2 using namespace std;
      3 int main()
      4 {
      5     int a;
      6     double b;
      7     string buf;
      8     cin>>a>>b>>buf;
      9     //读入字符串时遇到空格则止 12 23.5 aa bb cc dd
     10 
     11     cout<<a<<endl;
     12     cout<<b<<endl;
     13     cout<<buf<<endl;
     14     return 0;
     15 }
     16 

     为了解决诸多如此类的问题,于是C++提供了cin不可或缺的成员函数。具体用法及区别一一列举如下。

    1. char get() 读入一个字符并返回(包括回车;tab;空格等空白字符)

    示例1:

      1 int main()
      2 {
      3     char ch;
      4 
      5     //EOF为文件结束符,在windows系统下,用ctrl+z输入EOF,在linux环境下为ctrl+d
      6     while((ch = cin.get()) != EOF)
      7         cout<<ch;
      8     return 0;
      9 }

    注意:此程序在运行后,可以在键盘上任意输入,屏幕将显示输入的所有内容,当输入文件结束符时,退出程序。(所有示例应包含<iostream>头文件,并且使用命名空间std,此处略,详见说明部分程序。下同)

    2. istream& get(char&) 读入一个字符,读取成功返回非0,读取失败(比如遇到文件结束符)返回0值

    示例2:

      1 int main()
      2 {
      3     char ch;
      4 
      5     //get函数返回的是istream&,可实现链式编程
      6     while(cin.get(ch))
      7         cout.put(ch);
      8     return 0;
      9 }

    3.  istream& get(char *, int ,char )

      istream& get(字符指针,字符个数 n,终止字符)
     功能:从输入流中读取n-1字符,赋给字符数组或字符指针所指向的数组。如果在读取n-1个字符之前遇到终止字符,则提前结束。如果成功则返回非0,失败则返回0。会清空char*指向的空间,未读到n-1个字符或中止符,则会阻塞。不会越过中止符。在讲这个成员函数之前,先说几个简单的cin的其他成员函数,以便于更好地阐述这个函数:

        a. istream& ignore(streamsize n = 1, int delim= EOF);

         功能:从当前指针位置开始,忽略n个字节字符,直到遇到delim停止,默认参数为忽略一个字节

        b. int peek()

         功能:用来查看当前指针所在位置,用完当前指针位置不发生变化。

        c. istream& putback (char c);

         功能:往当前指针位置插入一个char c;

    示例3:

    查看代码
      1 int main()
      2 {
      3     char ch[20];
      4 
      5     //键盘输入i like c/i like c++ also/
      6     cin.get(ch,20,'/');
      7     cout<<"the first part is:"<<ch<<endl<<endl;
      8 
      9     //查看当前指针所在位置
     10     char peek = cin.peek();
     11     cout<<"the peek is:"<<peek<<endl<<endl;
     12 
     13     //忽略'/'这个字符
     14     cin.ignore(1,'/');
     15     //往当前指针位置插入一个char
     16     cin.putback('a');
     17 
     18     peek = cin.peek();
     19     cout<<"the peek is:"<<peek<<endl<<endl;
     20 
     21     cin.get(ch,20,'/');
     22     peek = cin.peek();
     23     cout<<"the second part is:"<<ch<<endl<<endl;
     24     cout<<"the peek is:"<<peek<<endl<<endl;
     25     return 0;
     26 }

    程序运行结果:

    1获

    4. istream& getline(char *p, int n, char c)

    cin.getline(字符数组或字符指针,字符个数 n,[终止字符])
    功能:与带三个参数的get()功能类似,从输入流中读取n-1字符,赋给字符数组或字符指针所指向的空间。如果在读取n-1个字符之前遇到终止字符(如果不写,默认为’
    ’),则提前结束。会清空char*指向的空间,未读到n-1个字符或中止符,则会阻塞,会越过中止符。 
    示例3:
      1 int main()
      2 {
      3     char str[1024];
      4     //此处输入同上,为i like c/i like c++ also/
      5     //输入20个字符,遇到'/'截止,会越过终止符,不需手动忽略,
      6     //如果不写终止符,默认为'
    '
      7     cin.getline(str,10,'/');
      8     cout<<str<<endl;
      9     cin.getline(str,10,'/');
     10     cout<<str<<endl;
     11     return 0;
     12 }

    程序运行结果:

    2获

    需要注意的是:

    get 和 getline最大的区别就是, get遇到界定符时, 停止执行,但并不从流中提取界定符, 再次调用会遇到同一个界定符,函数将立即返回,不会提取输入。getline则不同,它将从输入流中提取界定符,但不会把它放到缓冲区中。简单来说就是前者不会自动忽略界定符,而后者会。

    5. ostream put(char p)

    功能:输出一个字符,返回值为ostream类型,可实现链式编程

    示例:

      1 int main()
      2 {
      3     char str[] = "programming with with C++";
      4     for(unsigned int i = 0;i <sizeof(str)/sizeof(str[0]);i++)
      5     {
      6         //输出一个字符,返回类型为ostream,以实现再次调用(如下)
      7         cout.put(str[i]).put('x');
      8     }
      9     return 0;
     10 }

    程序运行结果:

    3获

  • 相关阅读:
    动态库 DLL 封装二:dll封装方法
    动态库 DLL 封装一:dll分类
    C++读取配置文件ini
    WCHAR 字符串拼接
    关于web桌面应用的集成解决方案
    CSS Grid网格布局(转)
    使用 antd 的 form 组件来自定义提交的数据格式
    syslogd日志的一些作用
    我的三年感悟——避免无尽的自我内耗
    《被讨厌的勇气》读后感
  • 原文地址:https://www.cnblogs.com/tuihou/p/9694982.html
Copyright © 2011-2022 走看看