day 20 (标准IO 与 文件IO)

标准IO与文件IO的区别

标准IO和文件IO的区别:
    1.标准IO是库函数,是对系统调用的封装
    2.文件IO是系统调用,是Linux内核中的函数接口
    3.标准IO是有缓存的
    4.文件IO是没有缓存的

IO:
    b  
    c
    d 
    -  标准IO
    l 
    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     异步IO
                O_CREAT     文件不存在创建
                O_TRUNC     文件存在截断(清0)
        返回值:
            成功返回文件描述符(很小的非负整数)
            失败返回-1 

        新生成的文件描述符总是为尚未被使用的最小的非负整数

        0: stdin
        1: stdout
        2: stderr

    3.关闭文件:
        close 
        int close(int fd);
        功能:
            将fd对应的文件描述符关闭
    
    4.读写:
        read/write 
        1.write
          ssize_t write(int fd, const void *buf, size_t count);
          功能:
            向fd对应的文件中写入buf指向的count个字节
          参数:
            fd:文件描述符
            buf:写入数据空间首地址
            count:写入的字节数
          返回值:
            成功返回实际写入字节数
            失败返回-1
 
          2.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 }
~             

运行结果 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值