xm C语言12

1.rewind函数

因为我们定义的FILE*fp 是一个指针,所以他不断移动的时候最终会到达文件末尾,我们如果还想使用这个文件关闭再打开未免太过麻烦,所以就有了rewind

rewind的作用就是将指针移动到文件开头,在 再次读取相同的文件 以及读写之间转换 时起作用

objectivec 复制代码
   #inclde<stdio.h>
   int main(){
//rewind函数
    FILE*fp=fopen("ok.txt","r");
    if(file==NULL){
    printf("error");
    return 0;}
    char x;
    while(fscanf(fp,"%c",&x)!=EOF){
        printf("%c",x);
    }
    rewind(fp);
    printf("again\n");
    while(fscanf(fp,"%c",&x)!=EOF){
        printf("%c",x);
    }
    fclose(fp);
    return 0;}

2.structure结构体写入和读取文件

写入:将结构体的内容传入到文件中保存,文件可以保存大量的结构体,使用方便

fprintf(file.name,"%s/%d....",variable);

读取:从文件中读取相应的内容传到内存,供计算机短期使用

fscanf(file.name,"%s",&x address);

objectivec 复制代码
    #include<stdio.h>
    struct school{char name[20];
               int a;//age
               char grade;//ABCD
               };
    int main(){
    FILE*file=fopen("school.txt","w");
    if(file==NULL){
    printf("error");
    return 0;}
    struct school s1={amy,18,B};
    fprintf(file,"name is %s, age is %d,grade is %c",s1.name,s1.a,s1.grade);}
    fclose(file);
    file=fopen("school.txt","r");
    char k;
    while(fscanf(file,"%c",&k)!=EOF){
        printf("%c",k);
    }
    fclose(file);
    return 0;}

这里输出用到的while循环就是当我读取的内容不等于EOF(不是结尾的时候)因此最后输出的结构就是 name is amy,age is 18,grade is B

同时在这里的while循环也可以是

fscanf(file,"name is %s,age is %d,grade is %c",&s1.name,&s1.a,&s1.grade);

printf("name is %s, age is %d,grade is %c",s1.name,s1.a,s1.grade);

fscanf的格式必须和fpeintf输入的完全匹配

结构体数组:(其实和结构体无异,只是这一步我想进行自己写入信息存储到文件中)

objectivec 复制代码
#include <stdio.h>
#include <stdlib.h>
struct school{
char name[20];
int a;//age
char grade;//ABCD
};
int main()
{ FILE*file=fopen("school.txt","w");
    struct school s[2];
   for(int o=0;o<2;o++){
    // 出错点struct school s[o]; 
    scanf("%s  %d  %c",&s[o].name,&s[o].a,&s[o].grade);
   }
    for(int i=0;i<2;i++){
    fprintf(file,"name is %s, age is %d,grade is %c",s[i].name,s[i].a,s[i].grade);}
    fclose(file);
    file=fopen("school.txt","r");
    char k;
    while(fscanf(file,"%c",&k)!=EOF){
        printf("%c",k);
    }
    fclose(file);
    return 0;}

3.search 从文件中查找

第一种 使用sctmp函数 strcmp(x,y)是逐字符比较然后进行做差,通常寻找单字符时使用

objectivec 复制代码
#include <stdio.h>
#include <stdlib.h>
int main()
{  FILE*fp=fopen("test.txt","w");
    if(fp==NULL){
        printf("error");
        return 0;
    }
    char ch[20]="letter";
    char word[]="A";
    fputs(ch,fp);
    fclose(fp);
    fp=fopen("test.txt","r");
    char k[20];
    
    int count=0;
    while(fscanf(fp,"%s",k)!=EOF){
                if(strcmp(k,word)==0)
        count++;
    }
     printf("occur %d times",count);
    fclose(fp);
    return 0;
}

第二种就是直接if进行比较(只需要换while循环部分) 如果是整数就更好做了

objectivec 复制代码
 
 while(fscanf(fp,"%c",&k)!=EOF){
 if(strcmp(k,word)==0)
        count++;
    }
 while(fscanf(fp,"%s",k)!=EOF){
 if(strcmp(k,word)==0)
        count++;
    }

4.f()的格式

首先f....()都是函数,只是简化了格式,但是仍然需要输入所需的内容来获得函数结果。他们来自于函数库 stdio.h 所以使用之前记得调用函数库

fscanf(文件指针, 格式字符串, 输入项表列) eg fscanf(fp, "%d,%f", &i, &t)

fprintf(文件指针, 格式字符串, 输出表列) eg ``fprintf(fp, "%d,%f", i, t)

fgets(字符数组, 最大字符数, 文件指针),作用是读取一行内容(包括换行符),并在末尾自动添加空字符 '\0' eg fgets(str, 100, fp) 从文件读取最多 99 个字符

fputs(字符串, 文件指针),作用是将字符串写入文件,不添加额外换行符 eg fputs("Hello", fp)

(四种用法来自夸克)

5.注意NULL EOF检查 记得关闭文件

相关推荐
怕浪猫几秒前
React从入门到出门 第五章 React Router 配置与原理初探
前端·javascript·react.js
jinmo_C++1 分钟前
从零开始学前端 · HTML 基础篇(一):认识 HTML 与页面结构
前端·html·状态模式
AI_56784 分钟前
零基础学Linux:21天从“命令小白”到独立部署服务器
linux·服务器·人工智能·github
鹏多多7 分钟前
前端2025年终总结:借着AI做大做强再创辉煌
前端·javascript
你怎么知道我是队长8 分钟前
C语言---printf函数使用详细说明
c语言·开发语言
weixin_446260859 分钟前
XPipe: 轻松访问你的服务器基础设施 [特殊字符]
运维·服务器
TTGGGFF10 分钟前
GLM-4V-9B 视觉多模态模型本地部署教程【保姆级教程】
linux·运维·服务器·图文对话
消失的旧时光-194313 分钟前
函数指针 + 结构体 = C 语言的“对象模型”?——从 C 到 C++ / Java 的本质统一
linux·c语言·开发语言·c++·c
小Tomkk16 分钟前
⭐️ StarRocks Web 使用介绍与实战指南
前端·ffmpeg
郝学胜-神的一滴17 分钟前
Linux系统编程:深入理解读写锁的原理与应用
linux·服务器·开发语言·c++·程序人生