用c语言实现成员函数 用c语言实现成员函数求和

C++中怎样声明输入流成员函数和输出流成员函数

在程序中一般用cout和插入运算符“”实现输出,cout流在内存中有相应的缓冲区。有时用户还有特殊的输出要求,例如只输出一个字符。ostream类除了提供上面介绍过的用于格式控制的成员函数外,还提供了专用于输出单个字符的成员函数put。如:

成都创新互联公司是一家专注于网站制作、网站设计与策划设计,集美网站建设哪家好?成都创新互联公司做网站,专注于网站建设十余年,网设计领域的专业建站公司;建站业务涵盖:集美等地区。集美做网站价格咨询:028-86922220

cout.put('a');

调用该函数的结果是在屏幕上显示一个字符a。put函数的参数可以是字符或字符的ASCII代码(也可以是一个整型表达式)。如

cout.put(65 + 32);

也显示字符a,因为97是字符a的ASCII代码。

可以在一个语句中连续调用put函数。如:

cout.put(71).put(79).put(79). put(68).put('\n');

在屏幕上显示GOOD。

[例13.4] 有一个字符串"BASIC",要求把它们按相反的顺序输出。

#include iostreamusing namespace std;int main( )

{   char *a="BASIC";//字符指针指向'B'

for(int i=4;i=0;i--)

cout.put(*(a+i));                  //从最后一个字符开始输出

cout.put('\n');   return 0;

}

除了使用cout.put函数输出一个字符外,还可以用putchar函数输出一个字符。putchar函数是C语言中使用的,在stdio.h头文件中定义。C++保留了这个函数,在iostream头文件中定义。

[例13.4] 也可以改用putchar函数实现。

#include iostream  //也可以用#include stdio.h,同时不要下一行using namespace std;int main( )

{   char *a="BASIC";   for(int i=4;i=0;i--)

putchar(*(a+i));

putchar('\n');

}

成员函数put不仅可以用cout流对象来调用,而且也可以用ostream类的其他流对象调用。

cin输入流详解

标准输入流是从标准输入设备(键盘)流向程序的数据。在头文件iostream.h中定义了cin、cout、cerr、clog 4个流对象(详情请查看:与C++输入输出有关的类和对象),cin是输入流,cout、cerr、clog是输出流。

cin是istream类的对象,它从标准输入设备(键盘)获取数据,程序中的变量通过流提取符“”从流中提取数据。流提取符“”从流中提取数据时通常跳过输入流中的空格、tab键、换行符等空白字符。

注意:只有在输入完数据再按回车键后,该行数据才被送入键盘缓冲区,形成输入流,提取运算符“”才能从中提取数据。需要注意保证从流中读取数据能正常进行。

例如:

int a,b;

cinab;

若从键盘上输入

21  abc↙

变量a从输入流中提取整数21,提取操作成功,此时cin流处于正常状态。但在变量b准备提取一个整数时,遇到了字母a,显然提取操作失败了,此时,cin流被置为出错状态。只有在正常状态时,才能从输入流中提取数据。

当遇到无效字符或遇到文件结束符(不是换行符,是文件中的数据已读完)时,输入流cin就处于出错状态,即无法正常提取数据。此时对cin流的所有提取操作将终止。在 IBM PC及其兼容机中,以Ctrl + Z表示文件结束符。在UNIX和Macintosh系统中,以 Ctrl + D表示文件结束符。当输入流cin处于出错状态时,如果测试cin的值,可以发现它的值为false(假),即cin为0值。如果输入流在正常状态,cin的值为true(真),即cin为 一个非0值。可以通过测试cin的值,判断流对象是否处于正常状态和提取操作是否成功。如:

if(!cn) //流cin处于出销状态,无法正常提取数据

cout"error";

[例13.5] 通过测试cin的真值,判断流对象是否处于正常状态。

#include iostreamusing namespace std;int main( )

{   float grade;

cout"enter grade:";   while(cingrade)//能从cin流读取数据   {      if(grade=85) coutgrade"GOOD!"endl;      if(grade60) coutgrade"fail!"endl;

cout"enter grade:";

}

cout"The end."endl;   return 0;

}

流提取符“”不断地从流中提取数据(每次提取一个浮点数),如果成功,就陚给 grade,此时cin为真,若不成功则cin为假。如果键入文件结束符,表示数据已完。

运行情况如下:

enter grade: 67↙

enter grade: 89↙

89 GOOD!

enter grade: 56↙

56 fail!

enter grade: 100↙

100 GOOD!

enter grade: ^Z↙//键入文件结束符

The end.

在遇到文件结束符时,程序结束。如果某次输入的数据为

enter grade: 100/2↙

流提取符""提取100,赋给grade,进行if语句的处理。然后再遇到"/",认为是无效字符,cin返回0。循环结束,输出"The end."。

在不同的C++系统下运行此程序,在最后的处理上有些不同。以上是在GCC环境下运行程序的结果,如果在VC++环境(笔者使用win7系统)下运行此程序,在键入Ctrl + Z 时,需要敲击两次回车,程序才输出"The end."。

get()函数读入一个字符

get()函数是cin输入流对象的成员函数,它有3种形式:无参数的,有一个参数的,有3个参数的。

1) 不带参数的get函数

其调用形式为

cin.get()

用来从指定的输入流中提取一个字符(包括空白字符),函数的返回值就是读入的字符。 若遇到输入流中的文件结束符,则函数值返回文件结束标志EOF(End Of File),一般以-1代表EOF,用-1而不用0或正值,是考虑到不与字符的ASCII代码混淆,但不同的C ++系统所用的EOF值有可能不同。

[例13.6] 用get函数读入字符。

#include iostreamusing namespace std;int main( )

{   int c;

cout"enter a sentence:"endl;   while((c=cin.get())!=EOF)

cout.put(c);   return 0;

}

运行情况如下:

enter a sentence:

I study C++ very hard.↙(输入一行字符)

I study C++ very hard.              (输出该行字符)

^Z↙(程序结束)

C语言中的getchar函数与流成员函数cin.get( )的功能相同,C++保留了C的这种用法,可以用getchar(c)从键盘读入一个字符赋给c。

2) 有一个参数的get函数

其调用形式为

cin.get(ch)

其作用是从输入流中读取一个字符,赋给字符变量ch。如果读取成功则函数返回true(真),如失败(遇文件结束符) 则函数返回false(假)。例13.6可以改写如下:

#include iostreamusing namespace std;int main( )

{   char c;

cout"enter a sentence:"endl;   while(cin.get(c))  //读取一个字符赋给字符变量c,如果读取成功,cin.get(c)为真   {cout.put(c);}

cout"end"endl;   return 0;

}

3) 有3个参数的get函数

其调用形式为

cin.get(字符数组, 字符个数n, 终止字符)

cin.get(字符指针, 字符个数n, 终止字符)

其作用是从输入流中读取n-1个字符,赋给指定的字符数组(或字符指针指向的数组),如果在读取n-1个字符之前遇到指定的终止字符,则提前结束读取。如果读取成功则函数返回true(真),如失败(遇文件结束符) 则函数返回false(假)。再将例13.6改写如下:

#include iostreamusing namespace std;int main( )

{   char ch[20];

cout"enter a sentence:"endl;

cin.get(ch,10,'\\n');//指定换行符为终止字符

coutchendl;   return 0;

}

运行情况如下:

enter a sentence:

I study C++ very hard.↙

I study

在输入流中有22个字符,但由于在get函数中指定的n为10,读取n -1个(即9个)字符并赋给字符数组ch中前9个元素。有人可能要问:指定n-10,为什么只读取9个字符呢?因为存放的是一个字符串,因此在9个字符之后要加入一个字符串结束标志,实际上存放到数组中的是10个字符。请读者思考:如果不加入字符串结束标志,会 出现什么情况?结果是:在用“coutch”;输出数组中的字符时,不是输出读入的字符串,而是数组中的全部元素。大家可以亲自测试一下ch[9](即数组中第10个元素)的值是什么。

如果输入↙

abcde

即未读完第9个字符就遇到终止字符、读取操作终止,前5个字符已存放到数组ch[0]到ch[4]中,ch[5]中存放'\0'。

如果在get函数中指定的n为20,而输入22个字符,则将输入流中前19个字符赋给字符数组ch中前19个元素,再加入一个'\0'。

get函数中第3个参数可以省写,此时默认为'\n'。下面两行等价:

cin.get(ch,10,'\\n');

cin.get(ch,10);

终止字符也可以用其他字符。如

cin.get(ch,10,'x');

在遇到字符'x'时停止读取操作。

c语言中怎样用代码添加数组成员数

C语言的数组有动态数组和静态数组两种。

1 静态数组。

对于静态数组,无法新增加数组成员数量。

所以一定要最初始定义足够大的数组,然后可以用一个整型变量维护数组中现有成员个数,再动态增加实际成员个数。

比如

int a[1000];

int n = 0;

while(scanf("%d",a[n]) != EOF) n ++;

这样的代码就可以实现增加数组成员数的类似效果。n为实际成员个数。

2 动态数组。

动态数组是可以随时改变数组成员个数的。不过为了确定当前数组个数,需要用两个整型变量来保存最大成员数,和已有成员数,这样就可以在不够的时候进行扩大。

int n = 0, size = 100; //n为当前元素个数,size为数组大小,初始为100.

int *a = NULL;//数组指针。

a = (int *)malloc(sizeof(int) * size); // 初始分配100个元素。

while(scanf("%d",a[n]) != EOF) 

{

n++;

if(n = size)//空间不足。

{

size+=100;//增加100个元素空间。

a = (int *)realloc(sizeof(int)*size, a);//重新分配空间。

}

}

C语言成员函数

首先这个是C++的代码,C是没有类的概念,也不会有成员函数的概念。

void在这里代表该成员函数没有返回值。


分享标题:用c语言实现成员函数 用c语言实现成员函数求和
浏览路径:http://azwzsj.com/article/dopdijc.html