c(文件)

1 文件函数

#include <stdio.h>
#include <stdlib.h>
int main() {
    FILE* fp; // 定义文件指针
    if ((fp = fopen("E:/test.txt", "r")) != NULL) {
        while (!feof(fp)) { // 没有到文件末尾
            char ch = fgetc(fp);
            printf("%c",ch);
        }
    }
    fclose(fp); // 关闭文件
    return 0;
}

2 从文件中输入

  char ch = fgetc(fp); // 读入一个字符
  
  char str[10]; // 一次读入多个字符
    if ((fp = fopen("E:/test.txt", "r")) != NULL) {
        fgets(str, 4, fp); // 缓存的数组,读入几个字符, 文件指针
    }
    
 if ((fp = fopen("E:/test.txt", "r")) != NULL) {
        fscanf(fp, "%s%s", str, strn);
        // 可以同时输入多个参数
        // 测试可以以空格隔开,或是换行,换行符可以有多个
    }
    
 fread(str, 1, 1, fp); // 缓冲区, 大小, 个数, 文件指针, 更适合读取结构体数据

3 文件写入

char str[] = "jfdsjjfkdsjfjsd ";
    if ((fp = fopen("E:/test.txt", "r+")) != NULL) {
        int t = fputs(str, fp); // 输出成功返回0
    }

char str[] = "李勇加油,你一定能够考上";
    char strw[] = "kao yan jiayou";
    if ((fp = fopen("E:/test.txt", "a")) != NULL) {
        fprintf(fp, "%s%s", str, strw);
    }

4 结构体读入和写出

 FILE* fp; // 定义文件指针
    Student a;
    Student b;
    scanf("%s %d %d", &a.name, &a.age, &a.score);
    cout << a.age << "  " << a.score;
    if ((fp = fopen("E:/test.txt", "wb")) != NULL) {
        fwrite(&a, sizeof(struct Student), 1, fp);
    }
    fclose(fp);
    if ((fp = fopen("E:/test.txt", "rb")) != NULL) {
        fread(&b, sizeof(struct Student), 1, fp);
    }
    cout << endl;
    cout << b.name << " " <<  b.age << "  " << b.score;
    fclose(fp); // 关闭文件
typedef struct Student {
    char name[20];
    int age;
    int score;
}Student;
const int N = 3;
int main() {
    FILE* fp; // 定义文件指针
    Student a[10];
    Student b[10];
    for (int i = 0; i < N; i++) {
        cout << "enter " << i << endl;
         scanf("%s %d %d", &a[i].name, &a[i].age, &a[i].score);
    }
    if ((fp = fopen("E:/test.txt", "wb")) != NULL) {
        for (int i = 0; i < N; i++) {
           
            fwrite(&a[i], sizeof(struct Student), 1, fp);
        }
    }
    fclose(fp);
    if ((fp = fopen("E:/test.txt", "rb")) != NULL) {
        for (int i = 0; i < N; i++) {

            fread(&b[i], sizeof(struct Student), 1, fp);
        }
    }
    cout << endl;
    for (int i = 0; i < N; i++) {
        printf("\n");
        printf("%s %d %d", b[i].name, b[i].age, b[i].score);
    }
    fclose(fp); // 关闭文件
    return 0;
}

5 文件随机读写

FILE* fp; // 定义文件指针
char str[100];
if ((fp = fopen("E:/test.txt", "r")) != NULL) {
    fseek(fp, 2L, 0); // 移动两个字节, 0表示从头开始移动,
    //1文件当前位置 2末尾
    rewind(fp); // 文件回到开始
    int i = ftell(fp); // 告诉文件位置
    cout << "pos : " << i << endl;
    fgets(str, 10, fp);
}

6 文件末尾

int main() {
    FILE* fp;
    char *st = (char *) malloc(100 * sizeof(char));
    strcpy(st, "E:\\test.txt");
    if ((fp = fopen(st, "r")) == nullptr)
        printf("No");
    while (!feof(fp))
    {
        char s[1024];
        fscanf(fp, "%s", s);
        printf("%s\n", s);
    }
    printf("finsh");
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值