C++中与输入相关的istream类成员函数简介_C 语言

eof 函数

eof是end of file的缩写,表示“文件结束”。从输入流读取数据,如果到达文件末尾(遇文件结束符),eof函数值为非零值(真),否则为0(假)。

[例] 逐个读入一行字符,将其中的非空格字符输出。

#include <iostream>
using namespace std;
int main( )
{
  char c;
  while(!cin.eof( )) //eof( )为假表示未遇到文件结束符
  if((c=cin.get( ))!=' ') //检查读入的字符是否为空格字符
   cout.put(c);
  return 0;
}

运行情况如下:

C++ is very interesting.
C++isveryinteresting.
^Z(结束)

peek函数

peek是“观察”的意思,peek函数的作用是观测下一个字符。其调用形式为:

  c=cin.peek( );

函数的返回值是指针指向的当前字符,但它只是观测,指针仍停留在当前位置,并不后移。如果要访问的字符是文件结束符,则函数值是EOF(-1)。
putback函数

其调用形式为

  cin.putback(ch);

其作用是将前面用get或getline函数从输入流中读取的字符ch返回到输入流,插入到当前指针位置,以供后面读取。

[例] peek函数和putback函数的用法。

#include <iostream>
using namespace std;
int main( )
{
  char c[20];
  int ch;
  cout<<"please enter a sentence:"<<endl;
  cin.getline(c,15,'/');
  cout<<"The first part is:"<<c<<endl;
  ch=cin.peek( ); //观看当前字符
  cout<<"The next character(ASCII code) is:"<<ch<<endl;
  cin.putback(c[0]); //将'I'插入到指针所指处
  cin.getline(c,15,'/');
  cout<<"The second part is:"<<c<<endl;
  return 0;
}

运行情况如下:

please enter a sentence:
I am a boy./ am a student./
The first part is:I am a boy.
The next character(ASCII code) is:32(下一个字符是空格)
The second part is:I am a student

ignore函数

其调用形式为

  cin.ignore(n, 终止字符)

函数作用是跳过输入流中n个字符,或在遇到指定的终止字符时提前结束(此时跳过包括终止字符在内的若干字符)。如
 

  ighore(5, 'A') //跳过输入流中个字符,遇'A'后就不再跳了

也可以不带参数或只带一个参数。如

  ignore( ) // n默认值为,终止字符默认为EOF

相当于

  ignore(1, EOF)

[例] 用ignore函数跳过输入流中的字符。先看不用ignore函数的情况:

#include <iostream>
using namespace std;
int main( )
{
  char ch[20];
  cin.get(ch,20,'/');
  cout<<"The first part is:"<<ch<<endl;
  cin.get(ch,20,'/');
  cout<<"The second part is:"<<ch<<endl;
  return 0;
}

运行结果如下:

I like C++./I study C++./I am happy.
The first part is:I like C++.
The second part is:(字符数组ch中没有从输入流中读取有效字符)

如果希望第二个cin.get函数能读取"I study C++.",就应该设法跳过输入流中第一个'/',可以用ignore函数来实现此目的,将程序改为:

#include <iostream>
using namespace std;
int main( )
{
  char ch[20];
  cin.get(ch,20,'/');
  cout<<"The first part is:"<<ch<<endl;
  cin.ignore( );//跳过输入流中一个字符
  cin.get(ch,20,'/');
  cout<<"The second part is:"<<ch<<endl;
  return 0;
}

运行结果如下:

I like C++./I study C++./I am happy.
The first part is:I like C++.
The second part is:I study C++.

以上介绍的各个成员函数,不仅可以用cin流对象来调用,而且也可以用istream类的其他流对象调用。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索c++
istream
1022女声成员个人简介、奥特曼家族成员和简介、ikon组合成员简介、韩国虎队成员简介、易语言数组加入成员,以便于您获取更多的相关知识。

时间: 2024-05-17 01:14:19

C++中与输入相关的istream类成员函数简介_C 语言的相关文章

C++中Operator类型强制转换成员函数解析_C 语言

类型转换操作符(type conversion operator)是一种特殊的类成员函数,它定义将类类型值转变为其他类型值的转换.转换操作符在类定义体内声明,在保留字 operator 之后跟着转换的目标类型.转换函数又称类型强制转换成员函数,它是类中的一个非静态成员函数.它的定义格式如下: 复制代码 代码如下: class <类型说明符1> { public: operator <类型说明符2>(); - } 这个转换函数定义了由<类型说明符1>到<类型说明符2

C++中可正确获取UTF-8字符长度的函数分享_C 语言

在C++的char*以及string中,使用的是字节流编码,即sizeof(char) == 1. 也就是说,C++是不区分字符的编码的. 而一个合法UTF8的字符长度可能为1-4位. 现在假设一串输入为UTF8编码,如何能准确的定位到每个UTF8字符的"CharPoint",而不会错误的分割字符呢? 参考这个页面:http://www.nubaria.com/en/blog/?p=289 可以改造出下面的函数: const unsigned char kFirstBitMask =

C语言中对于循环结构优化的一些入门级方法简介_C 语言

一.代码移动 将在循环里面多次计算,但是结果不会改变的计算,移到循环外面去. 例子: 优化前: void lower1(char *s){ int i; for(i=0;i<strlen(s);++i) if(s[i]>='A'&&s[i]<='Z') s[i]-=('A'-'a'); } 优化后: void lower2(char *s){ int i; int len=strlen(s); for(int i=0;i<len;++i) if(s[i]>='

类成员函数指针区别于用法

通常的函数指针大家已经非常熟悉了.但我们今天讨论一下类成员函数指针的用法. 今天我们来看一下成员函数指针,加入我们想要声明一个 void CTest::Show()成员函数指针类型,那么我们一般的做法是: typedef void(CTest::*pShow)(); 从上面可以看出一些和一般函数指针类型不同的地方.让我们把他和一般的函数声明比较一下.下面是一般的函数声明: typedef void(*pShow)(); 我们可以看出成员函数指针和一般函数指针的不同,那就是成员函数指针声明时加上类

解析C++中派生的概念以及派生类成员的访问属性_C 语言

C++继承与派生的概念.什么是继承和派生 在C++中可重用性是通过继承(inheritance)这一机制来实现的.因此,继承是C++的一个重要组成部分. 前面介绍了类,一个类中包含了若干数据成员和成员函数.在不同的类中,数据成员和成员函数是不相同的.但有时两个类的内容基本相同或有一部分相同,例如巳声明了学生基本数据的类Student: class Student { public: void display( ) //对成员函数display的定义 { cout<<"num: &qu

c++中string类成员函数c_str()的用法_C 语言

1.string类成员函数c_str()的原型: const char *c_str()const;//返回一个以null终止的c字符串 2.c_str()函数返回一个指向正规c字符串的指针,内容和string类的本身对象是一样的,通过string类的c_str()函数能够把string对象转换成c中的字符串的样式; 3.操作c_str()函数的返回值时,只能使用c字符串的操作函数,如:strcpy()等函数.因为,string对象可能在使用后被析构函数释放掉,那么你所指向的内容就具有不确定性.

C++ 如何获取类成员函数地址?

C语言中可以用函数地址直接调用函数:     void print ()       {          printf ("function print");       }       typdef void (*fun)();       fun f = print;       f(); C++中类非静态成员函数必须通过实例去调用,C++中类成员函数调用:     class test       {       public:       void print ()     

C#想方设法调用C++类成员函数!

问题描述 .net互操作一直没有接触过,最近有一个C#程序必须要使用C++DLL类成员函数.....头都木了,各种狂查,基本对Pinvoke有一些了解.但第一次看到PInvoke声明DLL函数的写法"staticextern"时,就有疑问:这个static,难道意味着C++DLL函数都必须是全局的?想调用C++public类成员函数是行不通的?于是写了个测试程序,发现PInvoke貌似调不了C++类成员函数..........但由于本人没有此方面任何经验,无法做结论,所以请教各位:PI

把C++类成员函数集成到lua

       有时我们会把C++类导入到lua,这样方便在lua里面对C++类进行操作,这在游戏编程里面经常使用,本文只是简单介绍一种实现.        1.       lua里面面向对象的实现               在lua里面,我们可以这样操作表,如下:          Account = {balance = 0}        function Account:withdraw (v)               self.balance = self.balan