0731【软件编程】

1.fputs和fgets 
    1.fputs 
      int fputs(const char *s, FILE *stream);
      功能:
      向流中写入一个字符串 
      返回值: 
      成功返回非负数
      失败返回EOF

#include<stdio.h>
int main(void)
{
    FILE*fp = NULL;
    char str[32] = {"hello world"};
    fp = fopen("file.txt","w");

    if(fp==NULL)
    {
        perror("fail to open");
        return -1;
    }

   fputs(str,fp);
   fputs("hello world",fp);

   fclose(fp);
   return 0;
}

        2.fgets

         char *fgets(char *s, int size, FILE *stream);
       功能:
         从流中读取一行字符串
       返回值: 
         成功返回存放字符串空间首地址
         失败或者读到文件末尾返回NULL
 

#include<stdio.h>
int main(void)
{
    FILE*fp = NULL;
    fp = fopen("file.txt","r");
    char str[4096] = {0};
    char * pstr = NULL;

    if(NULL == fp)
    {
        perror("fail to open");
        return -1;
    }
    
while(1)
{
    pstr = fgets(str,sizeof(str),fp);
     if(pstr == NULL)
     {
        break;
     }   
     printf("%s",str);
   
}
fclose(fp);
return 0;
}

2.fprintf()和fscanf()[格式化输入、输出]

 int fprintf(FILE *stream, const char *format, ...);
    功能:
        向流中写入格式化字符串 

    int fscanf(FILE *stream, const char *format, ...);
    功能:
        从流中读取格式化字符串

#include<stdio.h>
int main(void)
{
    FILE *fp = NULL;
    FILE*fp1 = NULL;
    int avg = 0;
    int ret = 0;
    int sum = 0;
    int i = 0;
    int a[3] = {0};


     fp = fopen("score.csv","r");
     fp1 = fopen("avgscore.csv","w");

     if(NULL == fp)
     {
        goto err1;
     }
     if(NULL == fp1)
     {
        goto err2;
     }
     while(1)
     {
        ret = fscanf(fp,"%d,%d,%d",&a[0],&a[1],&a[2]);
        if(ret == EOF)
        {
                    break;
        }
        sum=a[0]+a[1]+a[2];
        avg = sum/3;
        fprintf(fp1,"%d\n",avg);
     }
     fclose(fp);
     fclose(fp1);
     return 0;
     err1:
     return -1;
     err2:
     fclose(fp1);
}


 3.fread和fwrite


    1.fwrite
      size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
      功能:
        向流中写入nmemb个对象,每个对象size个字节,在ptr指向的空间中存放
      参数:
        ptr:写入数据空间的首地址
        size:每个对象的大小
        nmemb:写入对象的个数
        stream:文件流指针
      返回值: 
        成功返回实际写入对象的个数
        失败返回0 

int main(void)
{
    typedef struct student
    {
       char name[32];
       char sex;
       int age;
       int score;
    }stu_t;
    
    FILE *fp = NULL;
    int ret = 0;
    stu_t a ={"张三",'m',18,65};
    stu_t b = {"李四",'f',19,100};

    fp = fopen("b.txt","w");

    if(NULL == fp)
    {
        perror("fail to open");
    }
        fwrite(&a,sizeof(a),1,fp);
        fwrite(&b,sizeof(b),1,fp);
        fclose(fp);
        return 0;
}

    2.fread 
      size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
      功能:
        从流中读取nmemb个对象,每个对象size个字节,在ptr指向的空间中存放
      参数:
        ptr:存放数据空间的首地址
        size:每个对象的大小
        nmemb:写入对象的个数
        stream:文件流指针
      返回值: 
        成功返回实际读取对象的个数
        失败或者读到文件末尾返回0  

#include<stdio.h>
typedef struct student
{
    char name[32];
    char sex;
    int age;
    int score;
}stu_t;

int main(void)
{
    int i = 0;
    FILE *fp = NULL;
    fp = fopen("b.txt","r");
    size_t nret = 0;
    stu_t s[4];

    if(NULL == fp)
    {
        perror("fail to open");
        return -1;
    }

    nret = fread(s,sizeof(stu_t),4,fp);
    for(i = 0;i < nret;i++)
    {
          printf("姓名:%s\n", s[i].name);
        printf("性别:%c\n", s[i].sex);
        printf("年龄:%d\n", s[i].age);
        printf("成绩:%d\n", s[i].score);

    }
    fclose(fp);
    return 0;

}

如上图,如果将图中的char name[32]中的32进行修改,printf将会产生乱码。因为在b,txt中是以一个结构体为44个字节的标准fwrite,但如果修改fread的读取字节,就会改变结果。
 

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值