day 20 (标准IO 与 文件IO)
标准IO与文件IO的区别
标准IO和文件IO的区别:1.标准IO是库函数,是对系统调用的封装2.文件IO是系统调用,是Linux内核中的函数接口3.标准IO是有缓存的4.文件IO是没有缓存的IO:b cd - 标准IOl s p文件IO:1.操作步骤:打开 -> 读/写 -> 关闭2.打开文件:open int open(const char *pathname, int flags);int open(const char *pathname, int flags, mode_t mode);功能:打开文件并且获得文件描述符参数:pathname:要打开的文件名flags:标志位O_RDONLY 只读O_WRONLY 只写O_RDWR 读写O_APPEND 追加O_ASYNC 异步IOO_CREAT 文件不存在创建O_TRUNC 文件存在截断(清0)返回值:成功返回文件描述符(很小的非负整数)失败返回-1 新生成的文件描述符总是为尚未被使用的最小的非负整数0: stdin1: stdout2: stderr3.关闭文件:close int close(int fd);功能:将fd对应的文件描述符关闭4.读写:read/write 1.writessize_t write(int fd, const void *buf, size_t count);功能:向fd对应的文件中写入buf指向的count个字节参数:fd:文件描述符buf:写入数据空间首地址count:写入的字节数返回值:成功返回实际写入字节数失败返回-12.read ssize_t read(int fd, void *buf, size_t count);功能:从文件描述符fd对应的文件中读取count个字节存放到buf开始的空间中参数:fd:文件描述符 buf:存放数据空间的首地址count:想要读取数据字节数返回值: 成功返回实际读到的字节数失败返回-1 读到文件末尾返回0
人口普查作业
某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。
这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过 200 岁的老人,而今天是 2014 年 9 月 6 日,所以超过 200 岁的生日和未出生的生日都是不合理的,应该被过滤掉。
输入格式:
输入在第一行给出正整数 N,取值在(0,105];随后 N 行,每行给出 1 个人的姓名(由不超过 5 个英文字母组成的字符串)、以及按 yyyy/mm/dd
(即年/月/日)格式给出的生日。题目保证最年长和最年轻的人没有并列。
输出格式:
在一行中顺序输出有效生日的个数、最年长人和最年轻人的姓名,其间以空格分隔。
如下
1 #include<stdio.h>2 #include<string.h>3 4 int main(void)5 {6 int w=0;7 int n,cnt = 0;//cnt 符合条件的个数8 scanf("%d",&n);9 int year,mouth,day;10 char name[10],maxname[10],minname[10];11 int MAXage =20140907; int MINage = 18140907;12 while(cnt<n)13 {14 scanf("%s %d/%d/%d",name,&year,&mouth,&day);15 int s = year*10000+mouth*100+day;16 if(s>=18140907&&s<=20140907)17 {18 w++;19 if(s<MAXage)20 {21 strcpy(maxname,name);22 MAXage=s;23 }24 if(s>MINage)25 {26 strcpy(minname,name);27 MINage=s;28 } 29 }30 cnt++;31 }32 if(w>0)33 {34 printf("%d %s %s",w,maxname,minname);35 }36 37 return 0;38 }
~
运行结果