在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
在程序中一般用cout和插入运算符“<<”实现输出,cout流在内存中有相应的缓冲区。有时用户还有特殊的输出要求,例如只输出一个字符。ostream类除了提供上面介绍过的用于格式控制的成员函数外,还提供了专用于输出单个字符的成员函数put。如: [例13.4] 有一个字符串"BASIC",要求把它们按相反的顺序输出。 #include <iostream> using 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类的其他流对象调用。
标准输入流是从标准输入设备(键盘)流向程序的数据。在头文件iostream.h中定义了cin、cout、cerr、clog 4个流对象(详情请查看:与C++输入输出有关的类和对象),cin是输入流,cout、cerr、clog是输出流。 cin是istream类的对象,它从标准输入设备(键盘)获取数据,程序中的变量通过流提取符“>>”从流中提取数据。流提取符“>>”从流中提取数据时通常跳过输入流中的空格、tab键、换行符等空白字符。 注意:只有在输入完数据再按回车键后,该行数据才被送入键盘缓冲区,形成输入流,提取运算符“>>”才能从中提取数据。需要注意保证从流中读取数据能正常进行。 例如: 当遇到无效字符或遇到文件结束符(不是换行符,是文件中的数据已读完)时,输入流cin就处于出错状态,即无法正常提取数据。此时对cin流的所有提取操作将终止。在 IBM PC及其兼容机中,以Ctrl + Z表示文件结束符。在UNIX和Macintosh系统中,以 Ctrl + D表示文件结束符。当输入流cin处于出错状态时,如果测试cin的值,可以发现它的值为false(假),即cin为0值。如果输入流在正常状态,cin的值为true(真),即cin为 一个非0值。可以通过测试cin的值,判断流对象是否处于正常状态和提取操作是否成功。如: [例13.5] 通过测试cin的真值,判断流对象是否处于正常状态。 #include <iostream> using namespace std; int main( ) { float grade; cout<<"enter grade:"; while(cin>>grade)//能从cin流读取数据 { if(grade>=85) cout<<grade<<"GOOD!"<<endl; if(grade<60) cout<<grade<<"fail!"<<endl; cout<<"enter grade:"; } cout<<"The end."<<endl; return 0; } 流提取符“>>”不断地从流中提取数据(每次提取一个浮点数),如果成功,就陚给 grade,此时cin为真,若不成功则cin为假。如果键入文件结束符,表示数据已完。 运行情况如下: 在遇到文件结束符时,程序结束。如果某次输入的数据为 流提取符">>"提取100,赋给grade,进行if语句的处理。然后再遇到"/",认为是无效字符,cin返回0。循环结束,输出"The end."。 在不同的C++系统下运行此程序,在最后的处理上有些不同。以上是在GCC环境下运行程序的结果,如果在VC++环境(笔者使用win7系统)下运行此程序,在键入Ctrl + Z 时,需要敲击两次回车,程序才输出"The end."。 get()函数读入一个字符get()函数是cin输入流对象的成员函数,它有3种形式:无参数的,有一个参数的,有3个参数的。 1) 不带参数的get函数 [例13.6] 用get函数读入字符。 #include <iostream> using namespace std; int main( ) { int c; cout<<"enter a sentence:"<<endl; while((c=cin.get())!=EOF) cout.put(c); return 0; } 运行情况如下: C语言中的getchar函数与流成员函数cin.get( )的功能相同,C++保留了C的这种用法,可以用getchar(c)从键盘读入一个字符赋给c。 2) 有一个参数的get函数 #include <iostream> using 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函数 #include <iostream> using namespace std; int main( ) { char ch[20]; cout<<"enter a sentence:"<<endl; cin.get(ch,10,'\\n');//指定换行符为终止字符 cout<<ch<<endl; return 0; } 运行情况如下: 在输入流中有22个字符,但由于在get函数中指定的n为10,读取n -1个(即9个)字符并赋给字符数组ch中前9个元素。有人可能要问:指定n-10,为什么只读取9个字符呢?因为存放的是一个字符串,因此在9个字符之后要加入一个字符串结束标志,实际上存放到数组中的是10个字符。请读者思考:如果不加入字符串结束标志,会 出现什么情况?结果是:在用“cout<<ch”;输出数组中的字符时,不是输出读入的字符串,而是数组中的全部元素。大家可以亲自测试一下ch[9](即数组中第10个元素)的值是什么。 如果输入↙ get函数中第3个参数可以省写,此时默认为'\n'。下面两行等价: |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论