1、 C+笔记 第十三天 2007 年 4 月 9 日1、数据 内存中 变量磁盘上 文件2、把数据从其他的设备搬到内存中 - 输入 - 读 把内存中的数据放到其他设备中 - 输出 - 写3、流物质的定向移动,输入输出流中是数据的定向移动输入流的源头 : 文件 目的地:内存输出流的源头 : 内存 目的地:文件4、标准输出设备 - 显示器标准输入设备 - 键盘键盘 - 内存 - 显示器| |输入操作 输出操作 输入输出流 : 内存与磁盘之间,内存与标准输入输出设备之间的 5、cout 源 :变量 目的地 :显示器 cin 键盘 内存中某一变量6、标准输入流 cin istream 的一个对象标准输出流
2、 cout ostream 的一个对象标准错误流 cerr 目的地都是屏幕,用 cout 替代7、cin是一个带有缓冲的标准的输入对象,默认输入设备是键盘(1) : 自动校验数据类型 遇到回车才会开始读数据,遇到空格就结束,只能读一个单词流是数据的定向移动,被读走的数据就消失,没有读走的数据会一直留在流中,直到流的消失,数据也跟着消失流中有数据,就会阻塞,等待读取 - 所有输入方法的特性为什么 “可以连续使用? 因为返回就是 istream 对象本身的引用注意 : “ 不读回车,不读空格(2)get(): 每次 读一个字符。返回一个整数,实际上是读到字符的 ASCII 码把回车,空格都当作普通
3、字符读出来(3)get(char /get(charint main()int age;char name20 ;cout “;cin age;cin.get(); /读取流中残余的回车,以便getline 能正常工作/ cin.ignore(20,n); /忽略 20 个字符或者碰到回车,从流中清除cout “;cin.getline(name,20);cout 头文件ifstream ifs(“test.txt“); /创建一个 ifstream 的对象,打开文件,给构造函数传如一个参数,就是文要打开的文件名 /文件的在当前目录下找,也可以用相对路径或绝对路径找文件在打开文件之后,立即判断
4、打开文件是否成功if( ifs.fail() )cout “Cant open test “ endl;return 0;if( ! ifs ) /也可以这样判断文件打开是否出错cout “Cant open test “ endl;return 0;(2)在文件结束的时候都会有“EOF“标志,作为文件结束的标志符可以用判断是否读到“EOF“,来判断时候读到文件尾了if(ifs.eof()break;(3)对于一个进程可打开文件的数量是有数的,所以文件属于资源所以在使用完毕以后,要关闭文件输入流 练习:(1)把/etc/passwd 文件打印出来(2)把文件中不以“#“开头的内容读出来peek
5、(),ignore()9、输出操作 cout(1) 操作 被输出到屏幕上的东西,只所以能输出,都是以字符串类型输出也就是说这个操作有自动类型转换的功能(2)put() 返回 cout 引用,可以连续调用 (3)write(buf,len) 按指定长度写到屏幕上 buf 是 char*类型(4)cout.width(10); 打印的内容总共占 10 个字符,并靠右对齐只对其后边的一个 cout 生效(5)cout.fill(#); 用#补齐空位主要调用一次,对以后的都生效 (6)setf()操作,控制格式,教材 188 页 (7)特殊字符r 表示回退一个格,再输出n 回车 输出一个,因为会被认为
6、是转义字符t 一个 tab 键(8)输出控制符oct 按八进制输出 “0”dec 使进制输出hex 按十六进制输出 “0x”flush 清空缓冲区 带缓冲区是因为和外部设备交涉,这样能减少向屏幕输出的次数,提高效率回车、程序结束和 flush 都是刷新缓存的命令cout “a“ flush ;10、ofstream打开文件,把数据写进文件,关闭文件 ofstream ofs(“ofstream.txt“); /打开文件,若文件不存在,创建,存在,打开if(ofs.fail() /写文件失败,一般是权限问题cout “open file error “endl;return 0;在 iostre
7、am 头文件中 cin cout 对象已经被声明,可以直接使用,因为标准输入输出设备是唯一的,系统声明但是 fstream 的对象要程序员来声明,因为对文件的输入输出是不唯一的ofstream ofs(“ofstream.txt“ , ios:app); /以追加的形式向文件中写ios:trunc 默认方式 把文件内容清空,写新的文件ios:nocreate 不创建新文件ios:noreplace 不改写,要创建新文件组合多个 ofstream ofs(“ofstream.txt“ , ios:app | ios:in | ios:binary);11、读写二进制文件(1)ios:binary(2)read/write 方法读写二进制文件,因为这两个方法只需要起始位置和大小就可以工作作业:(1)int readInt()double readDouble()强转函数,要求容错能力强,要求有可靠的手段通知用户是否出错 (2)根据用户输入的用户名,打印他的用户 id,home,shell,如果用户不存在,通知用户strtok(),strcmp()