C++学习:第二章C语言基础 - (十九)文件

1. 几个主要的函数

puts          向屏幕输出一行,自动增加换行符

gets          从键盘读取一行,丢弃换行符,替换为\0

fgets         从文件中读取一行,将换行符作为字符串的一部分,保留末尾的换行符。

fputs         从文件中写入一行,不会再末尾添加换行符

getc          从键盘读取一个字符

putc          从屏幕输出一个字符

getchar    等价于getc(stdin)

outchar    等价于putc(c, stdout)

fgetc         从文件中读取字符(char),等价于getc

fputc         从文件中写入字符(char)

fread         从文件到内存

fwrite       从内存到文件

2. EOF

EOF是一个计算机术语,为End Of File的缩写,在操作系统中表示资料源无更多的资料可读取。资料源通常称为档案或串流。通常在文本的最后存在此字符表示资料结束。实际上 EOF 的值通常为 -1,但它依系统有所不同。

#include <stdio.h>

int main(void){

    int n,i;
    int array[25];
    while(scanf("%d",&n)!=EOF){
        for (i=0; i<n; i++)
            scanf("%d",&array[i]);
        for (i=0; i<n; i++)
            printf ("%d ",array[i]);
    }
return 0;

}

3. 循环读取文件

FILE* fileIn;
FILE* fileOut;
char c;

while((c=fgetc(fileIn))!=EOF){
         putchar(c);//输出到屏幕
         fputc(c,fileOut);}//输出到文件

4. 文件的读写指针

当我们对文件进行读写操作时,内核会记录当前的位置,但是尴尬的是这个位置是读写公用的(我记得java中是个指针,指向当前的位置)

int  feek(FILE* steam, long offset, int whence)
    whence取值: SEEK_SET从头开始  SEEK_CUR从当前开始   SEEK_END从末位开始
long ftell(FILE* stream) 取得当前读写位置
void rewind(FILE* stream) 把当前文件读写位置设为文件开头
#include <stdio.h> 

int  main(void){

    FILE* fp = fopen("file", "r+");
    char c10, c20;
    if (fp == NULL)  {
        printf("filed");
        return 1;  }

    fseek(fp, 9, SEEK_SET);
    c10 = fgetc(fp);

    fseek(fp, 9, SEEK_CUR);
    c20 = fgetc(fp);

    fseek(fp, -11, SEEK_CUR);
    fputc(c20, fp);

    fseek(fp, -8, SEEK_END);
    fputc(c10, fp);

    return 0;
}

5. fread 和fwrite 

fread         从文件到内存

fwrite       从内存到文件

#include <stdio.h> 

typedef struct person{
    char name[20];
    char gender;
    int age;
    double salary;
}person;

int  main(void){
    person p[5] = {{"alksjdl", 'f', 25, 5000},{"alksjdl", 'f', 25, 5000},{"alksjdl", 'f', 25, 5000},{"alksjdl", 'f', 25, 5000},{"alksjdl", 'f', 25, 5000}};
    int b[10] = {};
    short s = 0;

    FILE* fp = fopen("person.kkd", "wb");//设置为强制原样操作
    if(fp == NULL){
        printf("error");
        return 1;
    }

    fread(p, sizeof(person), 5, fp);
    fread(b, sizeof(int), 10, fp);
    fread(&s, sizeof(short), 1, fp);
    fclose(fp);

    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值