6.26-2023

6.26-2023
实习主要内容:
1.行缓存:

以下是几种常用的刷新缓存的方法:

//方法一:
/*//行缓存大于等于1024个字节,刷新缓存,就可以打印*/
/*如果小于1024,则不会显示字符,存在缓冲区中*/
#include <stdio.h>
int main()
{
int i;
for(i=0;i<=1024;i++)
{
printf("A");
}
while(1);
}
//方法二:
/*使用\n刷新缓存*/
#include <stdio.h>
int main()
{
printf("A");
//printf("A\n");
while(1);
}
//方法三:
/*使用刷新缓冲流函数*/
#include <stdio.h>
int main()
{
int i;
for(i=0;i<=8;i++)
{
printf("A");
}
fflush(stdout);
while(1);
return 0;
}
//方法四:
/*没有while(1);碰到return 0 程序结束也可以刷新*/
#include <stdio.h>
int main()
{
int i;
for(i=0;i<=8;i++)
{
printf("A");
}
return 0;
}
2.全缓存(对文件的操作)
#include <stdio.h>

int main()
{

int i;
for(i=0;i<=4095;i++)//全缓存超过4096个字节,刷新缓存。
{
printf("a");
}
while(1);
return 0;
}
3.不缓存(stderr)
#include <stdio.h>
int main()
{
fprintf(stderr,"today is 2023/6/26");//无缓存,stderr
while(1);
return 0;
}
4.文件操作(标准I/O)
读写文件的几种方式:r r+ w w+ a a+
1.通过fp指针操作读取已存在文件的内容

fgetc函数返回一个int类型,值为字符的Ascii值。

#include <stdio.h>
int main()
{
        FILE *fp;
        int val;
        fp = fopen("log1","r+");//打开一个文件
        if(fp == NULL)
        {
                perror("");
                return -1;
        }
        val = fgetc(fp);//返回一个int类型
        printf("val = %d\n",val);
        fclose(fp);//关闭一个文件

        return 0;
}

fputc用法

#include <stdio.h>

int main()
{
        FILE *fp;
        int val;
        fp = fopen("log1","r+");//打开一个文件
        if(fp == NULL)
        {
                perror("");
                return -1;
        }
//      val = fgetc(fp);//按字符读
//      printf("val = %d\n",val);

        fputc(116,fp); //覆盖写流指针所指位置上的字符 
       //前面fgetc读取了的话,那么再覆盖写,指针应该在后一个位置上。     
        fclose(fp);//关闭一个文件
    
        return 0;

}

循环中:使用fgetc按字符读,fputc向文件中写入一个字符。

#include <stdio.h>

int main()
{
        int val;
        while(1)
        {
                val = fgetc(stdin);//按字符读
            	if(val == EOF) 
                //ctrl + D读到文件末尾显示success
                //读到文件末尾或者出现错误
                {
                        perror("");
                        return -1;
                }

                fputc(val,stdout);//向文件中写入一个字符
        }
        return 0;
}

还可以fgetc gputc 图片:

#include <stdio.h>
void copy_jpg(FILE*fp1,FILE*fp2)
{
        int val;
        while(1)
        {
                val = fgetc(fp1);//按字符读
                if(val == EOF)
                {
                        break;
                }
                fputc(val,fp2);//向文件中写入一个字符
        }
}
        int main()
        {
                FILE *fp1,*fp2;
                fp1 = fopen("picture.jpeg","r");
                if(fp1 == NULL)
                {
                perror("");
                return -1;
                }
                fp2 = fopen("copy.jpeg","w+");
                if(fp1 == NULL)
                {
                perror("");
                return -1;
                }
                copy_jpg(fp1,fp2);
                fclose(fp1);
                fclose(fp2);
                return 0;
        }

效果如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J18L8JS6-1687830468982)(C:\Users\19413\AppData\Roaming\Typora\typora-user-images\image-20230626111134484.png)]

fgets,fputs用法:

#include <stdio.h>
int main()
{
        char buf[32] = {0};
        fgets(buf,sizeof(buf),stdin); //从标准输入读一个字符串(用户进行输入)
        //printf("buf:%s\n",buf);
        fputs(buf,stdout);//将字符串输出到指定的文件当中 其实也就相当于printf
        return 0;
}
注意 gcc vim 可以用table键补齐,或者是箭头号快速写 table键补齐 补齐 补齐!!!

输出另一个文件里的一句字符串:

#include <stdio.h>
int main()
{
        char buf[32] = {0};
        FILE *fp;
        fp = fopen("log1","r");
        if(fp == NULL)
        {
                perror("");
                return -1;
        }
        fgets(buf,sizeof(buf),fp); //从标准输入读一个字符串(用户进行输入)
        //printf("buf:%s\n",buf);
        fputs(buf,stdout);//将字符串输出到指定的文件当中 其实也就相当于printf
        return 0;
}

fread,fwrite用法:

#include <stdio.h>
struct student
{
char name[32];
int id;
int score;
};
int main()
{
        struct student stu1 = {"jack",1,80};
        FILE *fp;
        fp = fopen("log1","w+");
        if(fp == NULL)
        {
                perror("");
                return -1;
        }
        fwrite(&stu1,sizeof(stu1),1,fp);//按对象进行写入
        return 0;
}

fwrite是C语言中的文件操作函数之一,用于向文件中写入数据。它的参数如下:

  1. 写入数据的首地址:void* buffer,指向将要写入数据的内存地址。
  2. 每个数据项的大小:size_t size,表示每次写入数据项的大小,以字节为单位。
  3. 写入数据项的个数:size_t count,表示要写入的数据项的个数。
  4. 要写入数据的文件指针:FILE* stream,指向要写入数据的文件流的指针。

e(&stu1,sizeof(stu1),1,fp);//按对象进行写入
return 0;
}


fwrite是C语言中的文件操作函数之一,用于向文件中写入数据。它的参数如下:

1. 写入数据的首地址:void* buffer,指向将要写入数据的内存地址。
2. 每个数据项的大小:size_t size,表示每次写入数据项的大小,以字节为单位。
3. 写入数据项的个数:size_t count,表示要写入的数据项的个数。
4. 要写入数据的文件指针:FILE* stream,指向要写入数据的文件流的指针。

函数的返回值是成功写入的数据项个数,如果返回值小于传入的count,则说明写入出现了错误。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值