作业信息
班级链接:https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP
作业要求:https://www.cnblogs.com/rocedu/p/9577842.html#WEEK14
作业正文:2022-2023-1 20221312 《计算机基础与程序设计》第十四周学习总结 - 221421李旻奇 - 博客园 (cnblogs.com)
学习目标:标准输入流
定义:标准输入流是从标准输入设备(键盘)流向程序的数据。
在头文件iostream.h中定义了cin,cout,cerr,clog4个流对象,cin输人流,cout,cerr,clog是输出流。
重点api:
cin.get() //一次只能读取一个字符
cin.get(一个参数) //读一个字符
cin.get(三个参数) //可以读字符串
cin.getline()
cin.ignore()
cin.peek()
cin.putback()
提取:
cin是istream类的对象,它从标准输入设备(键盘)获取数据,程序中的变量通过流提取符“>>”从流中提取数据。流提取符“>>”从流中提取数据时通常跳过输人流中的空格、tab键、换行符等空白字符。注意:只有在输入完数据再按回车键后,改行数据才被送人键盘缓冲区,形成输入流,提取运算符“>>”才能从中提取数据。需要注意保证从流中读取数据能正常进行。
换句话说:
cin接受输入时,>> 会过滤掉不可见字符(例如:空格、回车、TAB等)也就是说,从第一个非空白符开始读,直到空白符或者文件结束为止
注意此处与上次总节的右移运算符类似
只有在正常状态时,才能从输入流中提取数据。
当遇到无效字符或遇到文件结束符(不是换行符,是文件中的数据已读完)时,输人流cin就处于出错状态,即无法正常提取数据。此时对cin流的所有提取操作都将终止。在IBMPC及其兼容机中,以Ctrl+Z表示文件结束符。在UNIX和Macintosh系统中,以Ctrl+D表示文件结束符
例如: int a,b;
cin>>a>>b; // 若从键盘上输入 21 abc出错
如果测试cin的值,可以发现它的值为false(假),即cin为O值。如果输入流在正常状态,cin的值为true(真),即cin为一个非0值。可以通过测试cin的值,判断流对象是否处于正常状态和提取操作是否成功。
如: if(!cin) //流cin处于出错状态,无法正常提取数据
cout<<"error”;
作用原理
注意:流提取符“>>”不断地从输人流中提取数据(每次提取一个浮点数),如果成功,就可以赋给某个变量,此时cin为真,若不成功则cin为假。如果输入文件结束符,表示数据已完。
有个例子是程序是通过键盘录入读取,但是读取的只有一个
#include <iostream>
using namespace std;
int main01(void)
{
char YourName[50];
int myInt;
long myLong;
double myDouble;
float myFloat;
unsigned int myUsigned;
cout<<"请输入一个int:";
cin>>myInt;
cout<<"请输入一个Long";
cin>>myLong;
cout<<"请输入一个Double:";
cin>>myDouble;
cout<<"请输入你的姓名:";
cin>>YourName;
cout<<"\n\n你输入的数是:"<<endl;
cout<<"int:\t"<<myInt<<endl;
cout<<"Long:\t"<<myLong<<endl;
cout<<"double:\t"<<myDouble<<endl;
cout<<"char *:\t"<<YourName<<endl;
return 0;
}
从上面不难看出利用cin流可以实现有缓存输入:
C语言中的getchar函数与流成员函数cin.get()的功能相同,C++保留厂C的这种用法,可以用getchar(c)从键盘读取一个字符赋给变量c。
ignore函数
其调用形式为: cin.ignore(n,终止字符) // 函数作用是跳过输人流中n个字符,或在遇到指定的终止字符时提前结束(此时跳过包括终止字符在内的若干字符)。
如:
ighore(5,A,) //跳过输入流中5个字符,遇A后就不再跳了
也可以不带参数或只带一个参数。如
ignore() (n默认值为1,终止字符默认为EOF)
相当于: ignore(1,EOF)